三年没动过栏目结构的企业站:pillar-cluster 内链架构与站点层级改造实录
适用读者:接手老企业站的技术 SEO 从业者、负责官网改版的前端与全栈工程师、被「收录上不去」折磨的企业站站长。
上个月一位做了十几年机械制造的朋友给我看他们官网的 Google Search Console(GSC)后台,页面索引报告里一长串灰字:已抓取 - 未编入索引,604 个页面里占了 483 个。他第一反应是网站被 Google 惩罚了。我说恰恰相反,Google 对你这站抓得挺勤快,问题出在结构上——600 多个页面摊平在一个层级里,栏目之间互不链接,权重进站之后没有路可走。
这个站 2018 年找外包做的,中间只换过两次视觉稿,栏目结构三年没动过。8 月我开始帮他按 pillar-cluster(支柱-集群)模型做架构改造,8 周后索引率从 19% 拉到 72%,核心词进前 3 页的数量从 17 个涨到 39 个。这篇文章把整个改造拆开记录:改前怎么诊断、内链权重怎么量化、URL 怎么做 301 收敛,以及踩过的几个坑。
600 页扁平结构,问题到底出在哪
老周这个站(化名,下文都这么称呼)是典型的历史包袱型企业官网。市场部的人这些年断断续续往上传内容:产品页 300 多个,参数与图纸下载页 90 多个,新闻 180 多篇,客户案例 40 来篇。当年 CMS 图省事,所有页面全挂在根目录下,路径长这样:/product-cnc-vmc850.html、/news-2023-06-08.html。没有层级,没有栏目互链,侧边栏是全站统一的一排「产品中心 / 新闻动态 / 联系我们」,仅此而已。

我接手诊断时做了三件事,把问题钉死:
- 写了个小爬虫把全站 604 个页面扫了一遍,统计每页的站内入链数。71% 的页面入链数是 0,也就是孤儿页(Orphan Page),只能靠 sitemap.xml 和列表分页被 Google 发现。
- 看 GSC 抓取统计报告,新品页发布两周,抓取记录还是 0 次;整站日均抓取量平摊到 600 个页面上,每个页面几天才轮到一次。
- 拉 50 个核心词的排名快照,只有 17 个词进过前 3 页,而且全集中在首页和两个权重最高的老产品页上。
问题不在内容。老周的产品页参数写得很全,新闻也是市场部真人在更新,一年能出 60 多篇。坏在链接图:首页链到几个栏目列表页,列表页链到分页,翻到第 5 页之后基本就是死胡同;详情页之间互相不知道对方存在。Google 就算抓到了页面,也判断不出哪些页面重要,判断不出主题归属,索性大量挂着「已抓取 - 未编入索引」。
老周当时的原话是:「我这些页面单拎出来哪篇不比同行写得细,怎么就是不给排名?」这话其实答了:单独看每页都行,合在一起就是一盘散沙,搜索引擎没有理由相信这个站任何一块内容是权威的。
内链权重分配的机制:PageRank 在站内怎么流动
改造前得把底层逻辑讲透。Google 官方 SEO 入门指南把链接描述成「投票」,一个页面收到的站内链接越多、来源页面本身越权威,它被评估为重要的概率就越高。这是 PageRank 在站内维度的直观表现:权重沿链接流动,每经过一层稀释一次;没有内链指向的页面,权重流动到不了,只能靠外部信号硬扛。
扁平结构的病根在于:604 个页面在链接图上几乎是对等节点,首页权重平摊出去,落到每个详情页头上只剩薄薄一层;详情页之间零互链,权重流到叶子节点就断头,没有回流、没有再分配。Google 的抓取调度器(crawler scheduler)也会参考站内链接结构决定抓取优先级,0 入链的孤儿页在抓取队列里天然排后面,索引速度自然起不来。
改造成 pillar-cluster 之后,链接图变成「星型 + 网状」的混合结构:支柱页(Pillar Page)承接栏目层的主要入链,集群页(Cluster Page)挂在支柱页下面,集群页之间横向互链。权重在簇内循环加强,再通过集群页指向支柱页的链接向上回流,形成有方向的权重循环。下面这张图是改造前后链接图的直观对比:
graph LR
subgraph B["改造前:扁平散点结构"]
direction LR
H0["首页"] --> L0["栏目列表页 x5"]
L0 --> D0["产品详情 / 新闻详情"]
O0["孤儿页 x430<br/>0 站内入链"]:::ghost
end
subgraph A["改造后:pillar-cluster 层级"]
direction LR
H1["首页"] --> P1["支柱页 x6"]
P1 --> C1["集群页 x48"]
C1 --> D1["详情页"]
C1 -->|"横向互链"| C1
D1 -->|"面包屑回流"| P1
end
classDef ghost fill:#eee,stroke-dasharray: 5 5
左半边的问题一眼能看出来:孤儿页悬在图外面,权重流不过去;右半边所有节点都挂在一条从首页出发的路径上,每个页面至少有一条站内入链。这就是后面索引率能翻近四倍的图论基础。
重组方案:6 个支柱页 + 48 个集群页
先做关键词聚类,再定支柱。老周的产品线是数控加工中心、液压冲压设备、钣金生产线三大块,客户问得最多的场景集中在汽车零部件和家电外壳两块,另外站里积压的选型指南类内容不少。据此定了 6 个支柱页:三个产品线支柱、两个行业解决方案支柱、一个选型知识支柱。支柱页不是普通栏目页,每页都有 1500 字以上的原创导览内容,把本主题下所有子话题串起来。
48 个集群页按「一个集群页吃透一个长尾意图」来拆:比如「立式加工中心选型」下面挂精度对比、主轴配置、典型加工节拍这些子题;原来散落的 90 多个参数下载页全部归到对应集群页下面,作为集群页的内嵌资源而不是独立页面。原来 300 多个产品详情页保留,但全部挂进对应集群的层级里。
内链规则是这次改造的核心,写成硬性约束让开发执行:
| 链接位置 | 指向目标 | 数量约束 | 目的 |
|---|---|---|---|
| 支柱页正文 | 本簇全部集群页 | 8~10 条上下文链接 | 集中分发权重 |
| 集群页正文 | 所属支柱页 | 2~3 条 | 权重回流 |
| 集群页之间 | 同簇相关集群页 | 2~4 条 | 簇内循环 |
| 详情页面包屑 | 上两级层级 | 固定 2 条 | 传递层级信号 |
| 详情页正文 | 同簇相关详情页 | 1~2 条 | 长尾互通 |
一个执行细节:上下文链接要出现在正文段落里,锚文本用描述性的词,不要做成正文底部一排「相关推荐」的机器拼接。Google 对模板化推荐位的链接加权一直很保守,正文里的编辑性链接(editorial link)信号强得多。
改造后的目标结构长这样,6 个支柱页各自带一簇集群页,详情页通过面包屑和正文链接挂回支柱:
graph TD
HOME["首页 /"] --> P1["支柱页:数控加工中心"]
HOME --> P2["支柱页:液压冲压设备"]
HOME --> P3["支柱页:行业解决方案"]
P1 --> C11["集群页:立式加工中心选型"]
P1 --> C12["集群页:五轴应用案例"]
P1 --> C13["集群页:加工精度参数对比"]
P2 --> C21["集群页:冲压线安全规范"]
P3 --> C31["集群页:汽车零部件行业方案"]
C11 --> D1["详情页 /products/cnc/vmc850/"]
C12 --> D1
D1 -->|"面包屑回流"| P1
C11 <-->|"横向互链"| C12
URL 三层收敛与 301 映射
URL 层级和内容层级同步收敛,统一成三层:/products/cnc/vmc850/(栏目/子类/详情)、资讯归到 /insights/2024/slug/。所有旧路径走 301 永久重定向,映射表按栏目批量生成,特例单独补。下表是映射规则的节选:
| 旧 URL 模式 | 新 URL 模式 | 数量 | 说明 |
|---|---|---|---|
| /product/cnc-*.html | /products/cnc/{slug}/ | 137 | 按产品线归入子类 |
| /product/press-*.html | /products/press/{slug}/ | 96 | 同上 |
| /news/2023-*.html | /insights/2023/{slug}/ | 61 | 新闻并入资讯集群 |
| /download/{file}.pdf | 保留原路径 | 92 | PDF 不重定向,挂进集群页 |
| /about.html 等散页 | /company/{slug}/ | 18 | 小批量人工核对 |
Nginx 侧用 map 指令做批量映射,比重写几百条 rewrite 规则清爽得多:
# 环境:Nginx 1.24;map 块放在 http{} 里,reload 前先 nginx -t 校验语法
# 旧 URL 按栏目批量映射到新三层结构,单条特例用单独 location 兜底
map $uri $new_uri {
# 旧产品详情页 /product/cnc-xxx.html 收敛到 /products/cnc/xxx/
~^/product/cnc-(?<slug>.+)\.html$ /products/cnc/$slug/;
~^/product/press-(?<slug>.+)\.html$ /products/press/$slug/;
# 旧新闻页按年份并入新的资讯集群目录
~^/news/2023-(?<slug>.+)\.html$ /insights/2023/$slug/;
~^/news/2024-(?<slug>.+)\.html$ /insights/2024/$slug/;
# 没匹配上的旧路径一律回首页,避免 404 漏网
default /;
}
# 301 生效前先在本机 hosts 指向测试机,抽查 20 条旧路径的重定向响应头
server {
listen 443 ssl;
server_name www.example-machinery.com;
# map 命中后 $new_uri 非空,走 301 永久重定向,权重完整转移
if ($new_uri) {
return 301 https://www.example-machinery.com$new_uri;
}
# 未命中的请求交给新站点正常渲染
location / {
proxy_pass http://127.0.0.1:8080;
}
}
上线当天我在 GSC 提交了新的 sitemap,旧的提交记录没删,让两份对照观察。头一周旧 URL 的 301 命中率 99.2%,剩下 0.8% 是外部合作方硬编码的老链接,逐条补进了映射表。这里有个教训:改版前一定要把合作方、印刷品二维码、微信公众号历史文章里的外链路径扒出来过一遍,单靠正则映射兜不住所有历史路径。
内链审计:用脚本量化权重流向
架构改得对不对,不能靠感觉,得量化。我用了一个两层的审计口径:页面级的入链数(找孤儿页和权重洼地),栏目级的跨栏目链接矩阵(看权重流向是否符合设计)。脚本如下,改造前后各跑一遍,差异就是工作量清单:
# 依赖:Python 3.10+,requests、beautifulsoup4(pip install requests beautifulsoup4)
# 环境:全站 URL 清单 urls.txt 来自 sitemap 解析,逐页拉取后输出 CSV 审计报告
import csv
from collections import defaultdict
from urllib.parse import urlparse
import requests
from bs4 import BeautifulSoup
# 站内全部 URL 清单,一行一个
SITE_URLS = [u.strip() for u in open("urls.txt", encoding="utf-8") if u.strip()]
# 取路径前两段作为「栏目键」,用于统计栏目间的链接流向
def section_key(url):
parts = urlparse(url).path.strip("/").split("/")
# 单段路径统一归入 home 层,方便统计首页之外的人造层级
return "/".join(parts[:2]) if len(parts) >= 2 else "home"
# 入链计数表:目标 URL -> 站内指向它的链接条数
inbound = defaultdict(int)
# 栏目间链接矩阵:(源栏目, 目标栏目) -> 次数,用来核对权重流向
cross_section = defaultdict(int)
for url in SITE_URLS:
try:
# 逐页拉 HTML;生产环境建议加并发控制、UA 和超时重试
html = requests.get(url, timeout=10).text
except requests.RequestException:
# 抓取失败的页面跳过,失败清单最后单独输出排查
continue
soup = BeautifulSoup(html, "html.parser")
# 只统计正文 <main> 里的链接,导航、页脚另算,避免模板噪声
main = soup.find("main") or soup.body
for a in main.find_all("a", href=True):
href = a["href"].split("#")[0]
# 过滤外链、伪协议与空锚点
if not href.startswith("http"):
continue
if urlparse(href).netloc != urlparse(url).netloc:
continue
inbound[href] += 1
# 同栏目互链不进跨栏目矩阵,只关心跨栏目的流向
if section_key(href) != section_key(url):
cross_section[(section_key(url), section_key(href))] += 1
# 输出每个 URL 的入链数,0 入链的就是待处理的孤儿页
with open("inbound_report.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["url", "inbound_links"])
for u in SITE_URLS:
writer.writerow([u, inbound.get(u, 0)])
# 打印跨栏目矩阵前 20 行,肉眼核对哪些栏目还是互不来往
for (src, dst), n in sorted(cross_section.items(), key=lambda x: -x[1])[:20]:
print(f"{src} -> {dst}: {n}")
改造前跑出来的结果和爬虫初诊一致:71% 的页面 0 入链,跨栏目矩阵里「新闻→产品」「案例→产品」两个方向全是 0,也就是说 8 年里新闻和案例从没给产品页递过一票。改造后第 4 周复跑:0 入链页面降到 12 个(全是还没挂完的老图纸页),「insights→products」方向单月新增了 260 多条上下文链接,支柱页的入链数是改前的 14 倍。这份 CSV 我后来直接当验收标准用,开发每挂一批内链就重跑一次。
8 周执行节奏与 GSC 数据对比
执行节奏比想象中平缓:第 1~2 周做关键词聚类和支柱页定稿;第 3~4 周上线新 URL 结构和 301,同时迁内容;第 5~6 周集中补内链,重点是集群页之间和 insights 到产品的上下文链接;第 7~8 周清理残留孤儿页、复跑审计、盯 GSC。中间在第 5 周踩过一个坑:批量替换模板时把面包屑的第二级写死成了栏目名,导致一批详情页的面包屑层级断了一级,复跑审计时跨栏目矩阵突然冒出几百条异常链接才发现,改回来之后数据才恢复正常。
GSC 里最有说服力的是索引报告和效果报告这两组数:
| 指标 | 改造前(第 0 周) | 第 4 周 | 第 8 周 |
|---|---|---|---|
| 已编入索引页面 | 115(19%) | 296(49%) | 435(72%) |
| 已抓取 - 未编入索引 | 483 | 240 | 108 |
| 核心词进前 3 页数量 | 17 | 26 | 39 |
| 详情页平均点击深度 | 5.2 | 3.1 | 2.4 |
| 日均抓取量(全站) | 约 210 次 | 约 480 次 | 约 870 次 |
几个数字值得放在一起看。索引率 19% 涨到 72%,但抓取量也翻了两倍多——抓取调度器看到站内链接变密、层级变浅之后,主动提高了抓取预算(crawl budget),这是个正向循环:内链密 → 抓取勤 → 索引快 → 排名变动更快被发现。点击深度从 5.2 降到 2.4,意味着重要详情页离首页只隔两次点击,这是层级收敛最直接的收益。老周第 8 周在电话里的原话:「新闻页开始给产品页带流量了,以前那 180 篇新闻等于白写,现在等于埋了一堆管道。」
顺带说一下:这套架构对 GEO 的衔接价值
这次改造的主体是传统搜索引擎的收录与排名,但顺手为后续 GEO(生成式引擎优化,Generative Engine Optimization)铺了路。pillar-cluster 天然产出「一个主题一个权威聚合页」的结构,生成式引擎做检索增强时偏好摘取主题聚焦、层级清晰的页面;等后续要针对 AI 搜索做适配,只需要在集群页上补 FAQ 结构化数据和面向机器可读的内容组织,链接和层级这套地基不用再翻动。传统 SEO 是 1,GEO 是后面加的 0,顺序不能倒。
误区澄清或趋势预判
两个常见误区要提。第一个是只改 URL 不改内链,很多改版把 301 映射做得很完善,新结构上线后内链还是老样子,过两个月索引率纹丝不动,问题就出在 301 只转移单页权重、重建不了链接图;URL 和内链必须同一批改,缺一边都白干。第二个是支柱页写成大杂烩导航页,只有链接没有内容,Google 对「纯链接聚合页」的评估越来越严,支柱页必须有原创导览性内容才立得住。
趋势上说一句:AI 搜索起来的这两年,站内结构的马太效应在加重。生成式引擎给出的答案高度依赖少数权威来源,而「权威」的判断信号和传统索引一脉相承——主题聚焦、层级清晰、内链健康。老站的结构债越早还越便宜,等 AI 引擎也开始按链接图挑信源的时候,补课的成本只会更高。你要也在维护一个多年没动过结构的企业站,欢迎评论区聊聊你的索引率卡在哪一档。
参考与延伸
- Google SEO 入门指南(站内结构与链接基础):https://developers.google.com/search/docs/fundamentals/seo-starter-guide
- Google Search Console 帮助:网页索引报告的「已抓取 - 未编入索引」解读:https://support.google.com/webmasters/answer/7440203
- Google 搜索中心:Google 抓取与编入索引概览:https://developers.google.com/search/docs/crawling-indexing/overview
企业官网收录、pillar-cluster 模型、内链优化、面包屑导航、Google Search Console、技术SEO、站点层级改造