100 篇时整个站还能装在脑子里,1000 篇时装不下了。会开始出现内部自相矛盾、重复意图页、内链失效、被你忘掉的死簇。过 1000 之后的管理,主要是系统——生成的内容索引、重复扫描器、退役货架——不是写作。
问题背景
过 1000 篇但没有管理纪律的站,常常一边继续发一边流量见顶甚至下滑。原因通常在内部——重复竞争、链接腐烂、爬取预算浪费——不是外部算法。1000 之后每个流程都要有脚本支撑。
判断标准
- 你已经无法不查就回答”我有没有写过 X 这篇”。
- Search Console 里出现大量 “Duplicate without user-selected canonical”。
- 还在发文章,但 indexed 数量在下降。
- 多篇文章排同一个 query,互相吃流量。
- sitemap 里 1200 条但 Search Console 只报告 700 篇 indexed。
开始前准备
- 第一次审计留 2-3 周;之后每周几个小时的维护时间。
- 跑批量改文脚本前
git status必须干净。 - Search Console API 访问(OAuth 凭证)以便程序化拉数据。
实操步骤
- 内容索引由脚本生成,不要手维护。 40 行 Node 就能保持新鲜:
// scripts/build-content-index.mjs
import { readdirSync, readFileSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
import matter from 'gray-matter';
const ROOT = 'src/content/articles';
const rows = [];
for (const lang of readdirSync(ROOT)) {
for (const cat of readdirSync(join(ROOT, lang))) {
for (const file of readdirSync(join(ROOT, lang, cat))) {
if (!file.endsWith('.mdx')) continue;
const { data, content } = matter(readFileSync(join(ROOT, lang, cat, file), 'utf8'));
rows.push({
slug: data.urlSlug,
lang,
category: data.category,
title: data.title,
primaryKeyword: data.primaryKeyword || '',
publishedAt: data.publishedAt,
words: content.split(/\s+/).length,
});
}
}
}
writeFileSync('content-index.csv',
'slug,lang,category,title,primaryKeyword,publishedAt,words\n' +
rows.map(r => Object.values(r).map(v => `"${v}"`).join(',')).join('\n')
);
console.log(`Wrote ${rows.length} rows`);
需要时跑一下;要快照就 commit CSV。
- 重复意图扫描。 按
primaryKeyword分组:
awk -F, 'NR>1 {print $5}' content-index.csv | sort | uniq -c | sort -rn | head
# 3 "submit sitemap search console"
# 2 "firebase hosting cache"
# ...
# 任何 count > 1 都要决定合并或 canonical
- 重复用 301 合并,绝不删除。 在 host 配置里加一次 redirect,然后把被合并的文件改
draft: true:
# _redirects(Astro / Netlify 风格)
/articles/dup-slug-old /articles/canonical-slug 301
- 每月查内链。 这个规模总会因为改名出现死链:
# scripts/check-internal-links.mjs
import { readFileSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
const known = new Set(/* content-index.csv 里所有活 slug */);
const offenders = [];
walk('src/content/articles', (file) => {
const md = readFileSync(file, 'utf8');
const matches = md.matchAll(/\]\(\/[a-z]+\/articles\/([a-z0-9-]+)\/\)/g);
for (const m of matches) {
if (!known.has(m[1])) offenders.push({ file, broken: m[1] });
}
});
console.table(offenders.slice(0, 50));
- sitemap 只留 indexable URL。
astro.config.mjs里:
sitemap({
filter: (page) => {
// 排除标签页、草稿、noindex
return !/\/tag\//.test(page) && !page.endsWith('/draft/');
},
})
- 建”退役货架”流程。 拉 180 天 Search Console 数据,列零点击文章,逐条决策:
# Search Console API 拉过去 180 天按 page 的点击
curl -X POST "https://www.googleapis.com/webmasters/v3/sites/$SITE/searchAnalytics/query" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
--data '{
"startDate": "2025-11-23",
"endDate": "2026-05-22",
"dimensions": ["page"],
"rowLimit": 25000
}' \
| jq -r '.rows[] | select(.clicks==0) | .keys[0]' > retire-shelf.txt
wc -l retire-shelf.txt
# 1k 篇站预期 200-400 条
每条三选一:合到更强邻居、原地刷新、或 noindex,follow。决策记回内容索引。
- 调整发布 / 维护比例。 每周 content-ops 清单:
weekly:
- audit_duplicates: 1 h # 重复扫描,决定合并
- audit_internal: 1 h # 死链检查 + 修
- retire_review: 2 h # 拉 GSC 数据,退役 5-10 篇
- publish_new: 6 h # ~3 篇
total: 10 h
maintenance_ratio: 40%
- prebuild 闸门——任何审计阈值违反就挂构建:
node scripts/find-duplicate-keywords.mjs || exit 1
node scripts/check-internal-links.mjs || exit 1
node scripts/audit-sitemap-vs-index.mjs || exit 1
执行检查清单
- 内容索引由脚本生成,不手维护。
- 重复关键词扫描接到 prebuild。
- 内链检查至少每周跑一次。
- 退役货架每月用 Search Console 数据复查。
- 30-40% 周时间用在维护,并有记录。
上线后验证
- Coverage 报告 “Duplicate” 计数 4-8 周内下降。
- indexed / submitted 比例升到 90% 以上。
- 内链检查器最新一次报告 0 条死链。
容易踩的坑
- 用 100 篇时的工作流去管 1000 篇。过 500 之后手动操作全崩。
- 舍不得退役旧文。死页拖累整站。
- 加作者但没有编辑流程,不一致会指数级放大。
- 一年只做一次大审计。持续小审优于偶尔大审。
- 直接删而不是 301 合并——丢掉本来有的链接权重。
- noindex 页还留在 sitemap——Search Console 标 “Submitted but blocked”。
FAQ
- 1000 篇要不要拆成两个站?: 只有主题完全不重合、各自能独立活下来时才拆。否则会把权威拆掉,两边都受伤。
- “死页”占比多少算正常?: 即使健康的站,月点击 1 以下的文章占 20-40% 也很常见。问题是它们是主动拖累(重复意图)还是只是低优先级闲置。
- 到这个规模需要 CMS 吗?: 不一定。Astro Content Collections + 自动生成索引能撑到几千篇。瓶颈是流程不是工具。
- 做一次完整审计要多久?: 1000 篇第一次大约 2-3 周兼职。之后每月维护几小时。
- AI 能帮做审计吗?: 能。embedding 做重复检测,模型推荐合并候选。合并决策必须人工复核。