pillar/cluster 不是 SEO 黑魔法,它只是一种内容组织方式,正好对上 Google 评估主题权威的方式。做对了,pillar 页能上宽词排名,cluster 页能上长尾排名,它们之间用合理的内链连起来。关键是把关系编码进 schema,不是装脑子里。
问题背景
pillar page 是覆盖某个主题的宽度页(例如”如何搭一个内容站”)。cluster page 是覆盖一个细分子主题的深度页(例如”如何向 Google 提交 sitemap”)。cluster 向上链到 pillar,pillar 向下链到每个 cluster。Google 读链接图后判断”这个站在这个主题上有深度”。
判断标准
- 你能一口气说出站上 top 5-10 个主题簇。
- 每个 pillar 页有 5-15 个 cluster 页指向它。
- 任意 cluster 页距首页不超过 2 次点击。
- 内链锚文本用的是目标关键词,不是”点这里”。
- 新文章很自然就能归到已有 pillar,不需要手动调整。
快速结论
把 pillar/cluster 当数据维护——frontmatter 有 pillar 字段、脚本生成链接图。双向链、描述性锚文本、孤儿检测是关键。
开始前准备
- 已经发了至少 20-30 篇可以归类。
- 内容 schema 能扩出
pillar字段。 - 能跑个小 Node 脚本审计链接。
实操步骤
- frontmatter 加
pillar字段。 扩 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 个说明太宽。
-
先写 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 主题。避免 “click here” 或直接写 slug。
-
跑 pillar/cluster 审计脚本。 找弱 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(pillar 还没发)for "${pillar}": ${kids.join(', ')}`);
}
}
- 每季度复盘。 少于 4 条 cluster 链入的 pillar 是弱的;没有 pillar 的孤儿 cluster 需要补 pillar。
执行检查清单
- schema 包含
pillar+isPillar字段。 - pillar 页根据 frontmatter 自动渲 cluster 列表,不是手维护。
- 每篇 cluster 有 back-link 块。
- 审计脚本接到 prebuild,弱 pillar / 孤儿告警。
- 双向锚文本都描述性。
上线后验证
- Search Console → Performance → Pages:pillar URL 在宽关键词上累积曝光。
- URL Inspection cluster 显示 pillar 在 “Referring URLs” 里。
- Lighthouse → Accessibility → 链接可识别——全绿。
容易踩的坑
- 把 pillar 写成 1 万字大杂烩,什么都讲。更好的做法是结构化总览 + 链出。
- pillar → cluster 链了,cluster 不回链。双向链才是 cluster 模式生效的关键。
- 所有链都用同一个锚文本。要用相关词自然变化。
- pillar 设太多。5 个强 pillar 永远胜过 15 个半成品。
- cluster 列表硬编码在 pillar 里,过几个月就老化——一定要自动生成。
- 把 pillar/cluster 当 URL 结构(
/pillar/<x>/cluster/<y>/)。它是逻辑结构,不是 URL 结构。
FAQ
- pillar 页要多长?: 一般 2000-4000 字,但覆盖度比字数更重要。如果链了 10 篇深度 cluster,pillar 不需要再重复内容。
- cluster 之间可以互相链吗?: 可以,相关时就应该链。模式是 hub-and-spoke,但 spoke 之间也可以连。
- 需要专门的
/pillar/URL 结构吗?: 不需要。这是逻辑结构不是 URL 结构。pillar 和 cluster 都可以放在/articles/下。 - pillar 之间有重叠怎么办?: 选一个作为 canonical,把另一个合并掉,或者把它们的范围划窄到不重叠。
- 要加 JSON-LD
WebPage aboutschema 吗?: 可选但有用。pillar 标WebPage,加about指向主题。