pillar/cluster 不是什么 SEO 黑魔法,它只是一种内容组织方式,正好对上 Google 的 helpful content 系统和 AI 答案引擎判断”这个站到底懂不懂这个主题”的逻辑。做对了,pillar 页能上宽词排名,cluster 页能上长尾排名,它们之间的链接图会告诉爬虫”这个站在这个主题上是有深度的”。多数独立开发者犯的错,是把这个结构装在脑子里,而不是编码进内容 schema——一旦进了 schema,构建脚本就能帮你强制执行。
一句话总结
把 pillar/cluster 当数据维护:在 frontmatter schema 里加一个 pillar 字段,自动生成”本指南包含”列表和”返回 pillar”链接,两个方向都写描述性锚文本,再跑一个审计脚本,标出弱 pillar(cluster 少于 4 个)和孤儿 cluster(pillar 还没发)。5 个强 pillar 胜过 15 个半成品。下面是全部代码。
pillar 页和 cluster 页到底是什么
pillar page 宽泛覆盖一个主题(例如”如何搭一个内容站”)。cluster page 深入覆盖一个子主题(例如”如何向 Search Console 提交 sitemap”)。每个 cluster 向上链到 pillar,pillar 向下链到每个 cluster。Google 读这张链接图,就会判断这个站在这个主题上认真投入过。同样的双向结构也正是 AI 答案引擎在找的东西:截至 2026 年 6 月,ChatGPT、Perplexity、Gemini 和 Google AI Mode 越来越倾向引用主题连贯、互相打通的内容群,而不是孤立的零散文章——因为互相打通的覆盖读起来像真本事,而不是某篇蒙对的文章。
按目前能排上、能被引用的情况,推荐长度:
| 页面类型 | 字数(典型) | 职责 |
|---|---|---|
| pillar | 2500-4000 | 高层总览;链到每个 cluster;是该主题的 canonical 权威 |
| cluster | 1200-2500 | 把一个具体问题或一个侧面讲透 |
长度是参考,不是目标。一个链了 10 篇深度 cluster 的 pillar,不需要把它们再重复一遍;整个 cluster 集合的覆盖度,比 pillar 自己的字数更重要。
怎么判断你已经有这个结构(或者还没有)
- 你能一口气说出站上 top 5-10 个主题簇。
- 每个 pillar 页有 5-15 个 cluster 页指向它。
- 任意 cluster 页距首页不超过 3 次点击。(埋在 4 层以上的页面爬取频率更低,也会被当成不重要。)
- 内链锚文本用的是目标关键词,不是”点这里”或”阅读更多”——通用锚文本几乎传不了任何主题信号。
- 新文章很自然就能归到已有 pillar,不需要手动重排。
如果上面有两条以上不成立,下面的步骤能补上。
开始前准备
- 已经发了至少 20-30 篇可以归类。低于这个量,先写 cluster,pillar 后补。
- 内容 schema 能加一个
pillar字段。 - 能在 prebuild 里跑个小 Node 脚本审计链接。
实操步骤
- frontmatter 加
pillar字段。 扩 Zod schema,让关系变成数据而不是记忆:
// src/content/config.ts
schema: z.object({
// ...
pillar: z.string().optional(), // 此文所属 pillar 的 slug
isPillar: z.boolean().default(false),
}),
cluster 文章:
---
title: "如何向 Search Console 提交 sitemap"
urlSlug: "submit-sitemap-search-console"
pillar: "submit-website-to-google"
isPillar: false
---
pillar 文章:
---
title: "2026 把新站提交给 Google"
urlSlug: "submit-new-site-to-google-2026"
isPillar: true
---
-
想 5-10 个 pillar 主题。 每个需要至少 10-20 个候选 cluster,否则太窄。pillar 超过 10 个说明摊得太薄——Google 奖励的是几个主题上的深度,而不是很多主题上的浅尝辄止。
-
先写 cluster 再写 pillar。 先写 pillar 容易写空。每个 pillar 先发 5-7 篇 cluster,再回头写 pillar。因为难想的部分已经想透了,pillar 会更厚实、更诚实。
-
pillar 的”子文章列表”用程序自动生成。 pillar layout 里,绝不手维护:
---
import { getCollection } from 'astro:content';
const { lang, urlSlug } = Astro.props.article.data;
const clusters = (await getCollection('articles', (a) =>
a.data.lang === lang && a.data.pillar === urlSlug && !a.data.isPillar
)).sort((a, b) => a.data.title.localeCompare(b.data.title));
---
<h2>本指南包含</h2>
<ul>
{clusters.map((c) => (
<li>
<a href={`/${lang}/articles/${c.data.urlSlug}/`}>{c.data.title}</a>
<p>{c.data.description}</p>
</li>
))}
</ul>
- cluster 回链 pillar 也自动渲。 cluster layout 里渲一个”属于”块,免得忘了回链:
---
const { lang, pillar } = Astro.props.article.data;
const p = pillar
? (await getEntry('articles', `${lang}/${pillarPath}/${pillar}`))
: null;
---
{p && (
<aside class="pillar-up">
属于:<a href={`/${lang}/articles/${p.data.urlSlug}/`}>{p.data.title}</a>
</aside>
)}
-
两个方向的锚文本都要描述性。 pillar → cluster 锚文本描述 cluster 主题;cluster → pillar 锚文本描述 pillar 主题。换着说,别在每条链上重复同一个完全匹配的词。2026 年一个可用的配比(针对同一个目标页):大约 15-25% 完全匹配关键词、30-40% 部分匹配、其余用语义近义变体。永远别用”点这里""阅读更多”或直接写 slug。
-
跑 pillar/cluster 审计脚本。 在 Google 发现之前先找出弱 pillar 和孤儿 cluster:
// scripts/audit-pillars.mjs
import { readdirSync, readFileSync } from 'node:fs';
import { join } from 'node:path';
import matter from 'gray-matter';
const byPillar = new Map();
const pillars = new Set();
function walk(dir) {
for (const f of readdirSync(dir, { withFileTypes: true })) {
const full = join(dir, f.name);
if (f.isDirectory()) walk(full);
else if (f.name.endsWith('.mdx')) {
const { data } = matter(readFileSync(full, 'utf8'));
if (data.isPillar) pillars.add(data.urlSlug);
else if (data.pillar) {
if (!byPillar.has(data.pillar)) byPillar.set(data.pillar, []);
byPillar.get(data.pillar).push(data.urlSlug);
}
}
}
}
walk('src/content/articles');
for (const p of pillars) {
const count = (byPillar.get(p) || []).length;
if (count < 4) console.warn(`WEAK PILLAR (${count}): ${p}`);
}
for (const [pillar, kids] of byPillar) {
if (!pillars.has(pillar)) {
console.warn(`ORPHAN CLUSTERS (no pillar published yet) for "${pillar}": ${kids.join(', ')}`);
}
}
- 每季度复盘。 少于 4 条 cluster 链入的 pillar 是弱的。没有 pillar 的孤儿 cluster 需要补 pillar。把脚本接进 prebuild,弱 pillar 会作为构建告警出现,而不是三个月后才发现。
执行检查清单
- schema 包含
pillar+isPillar字段。 - pillar 页根据 frontmatter 自动渲 cluster 列表,不手维护。
- 每篇 cluster 有 back-link 块。
- 审计脚本接到 prebuild,弱 pillar 和孤儿都会告警。
- 两侧锚文本都描述性、有变化。
怎么验证生效了
权威信号是按月累积的,不是几天的事,所以先看先行指标:
- Search Console → Performance → Pages: pillar URL 在宽关键词上累积曝光,cluster 接住长尾查询。
- 对 cluster 做 URL Inspection: pillar 出现在”Referring page”/ referring URLs 里,说明回链被爬到了。
- Lighthouse → Accessibility →“Links have discernible names”: 全绿说明锚文本是真文字,不是裸图标或空链接。
- 爬取深度: 抽查每篇 cluster 是否在距首页 3 次点击以内可达。
容易踩的坑
- 把 pillar 写成 1 万字大杂烩,什么都讲。 结构化总览 + 链出,胜过把每个子主题都埋进去的一堵墙。
- pillar → cluster 链了,cluster 不回链。 双向链就是整个机制本身;单向链会让 cluster 看着像孤儿。
- 所有链都用同一个锚文本。 用相关词换着说;一模一样的完全匹配锚文本看着像操纵,也加不了新信号。
- pillar 设太多。 5 个强 pillar 永远胜过 15 个半成品。
- cluster 列表硬编码在 pillar 里。 你发下一篇 cluster 那一刻它就老化了。自动生成。
- 把 pillar/cluster 当 URL 结构(
/pillar/<x>/cluster/<y>/)。它是逻辑结构,不是 URL 结构。这些页可以全平铺在/articles/下。
FAQ
- pillar 页要多长? 截至 2026 年 6 月,一般 2500-4000 字,但覆盖度比字数重要。链了 10 篇深度 cluster 的 pillar,不需要再重复它们。
- cluster 之间可以互相链吗? 可以,相关时就应该链。模式是 hub-and-spoke,但子主题真的相关时,spoke 之间也可以连。
- 需要专门的
/pillar/URL 结构吗? 不需要。这是逻辑结构不是 URL 结构。pillar 和 cluster 都可以放在/articles/下。 - pillar 之间有重叠怎么办? 选一个作为 canonical,把另一个合并掉,或者把范围划窄到不再重叠。两个 pillar 抢同一个宽词,会把权威分散掉。
- 这对 AI 搜索有帮助吗,还是只对 Google? 有帮助。答案引擎(ChatGPT、Perplexity、Gemini、Google AI Mode)更倾向引用互相打通、主题连贯、署名清晰的页面群,而不是孤立文章,所以同一套结构也能帮你被引用。
- 要加 JSON-LD
WebPage aboutschema 吗? 可选但有用。pillar 标WebPage,加about指向主题实体,让主题关系在结构化数据里显式表达。
相关阅读
外部参考:Google Search Central 内链最佳实践 与 Search Engine Land 的 topic clusters 指南。