索引推送
页面发布不代表它会被抓取。对于一个新域名,Google 可能会在 sitemap 中找到一个 URL 后等待数周才处理。本技能是页面发布当天及后续跟进直至被收录的例行流程。请使用所有四种渠道;它们覆盖不同的搜索引擎,并有不同的限制。
| 渠道 | 覆盖范围 | 每日限制 | 操作方法 |
|---|---|---|---|
IndexNow (scripts/indexnow.mjs) | Bing, Yandex, Naver, Seznam, Yep。不包括 Google | 每次请求最多 10,000 个 URL | 一条命令 |
| Search Console URL 检查 → 请求索引 | 每个资源约 10 个 URL;大约在美国太平洋时间午夜重置 | 浏览器,一次一个 URL | |
| Search Console Sitemap → 重新提交 | 基本没有实际限制 | 浏览器,一个字段 | |
| Bing 站长工具 → 提交 URL | Bing | 100 个 URL | 浏览器,粘贴列表 |
对我们而言,请求索引是推动 Google 收录的关键:八个处于“未知”或“已发现”状态的 URL 在我们请求后大约一天内全部被收录。仅靠 Sitemap 和 IndexNow 会让 Google 页面继续等待。
浏览规则。 Search Console 和 Bing 站长是需要登录的站点:请以人类的速度逐页操作,切勿编写脚本自动化操作其界面。这同样适用于任何社交网站。如果某个站点对您进行限速或封锁,请停止操作并告知用户。
一次性设置
- Search Console: 添加一个“域名”资源(通过 DNS TXT 记录验证)。切勿删除该 TXT 记录;否则验证将失效。
- Bing 站长工具: 最快的方法是“从 Google Search Console 导入”。GSC 的域名资源无法导入;Bing 会创建一个 URL 前缀站点(如
https://example.com/)来代替,这同样有效。同时在该处也提交 sitemap。 - IndexNow 密钥文件,在首次提交之前部署:
此密钥设计为公开的(任何人都可以读取该文件),因此可以放在KEY=$(openssl rand -hex 16) printf '%s' "$KEY" > public/$KEY.txt # 任何在站点根目录下提供服务的文件夹 # 提交、部署,然后确认它能打印出密钥且只打印密钥: curl -s "https://example.com/$KEY.txt"package.json中:"seo:indexnow": "INDEXNOW_KEY=<key> node scripts/indexnow.mjs --host example.com" - 队列文件
docs/seo/index-queue.md(模板如下),提交到仓库。不要放在临时或 scratch 文件夹中。
工作流程:页面发布的当天
- 检查页面是否已上线。 对于自己的站点,按顺序请求:
每个 URL 必须返回 200(非重定向)、包含自引用的规范标签、出现在 sitemap 中,并且至少被一个 Google 已经抓取的页面(首页、博客索引、页脚的“最新文章”块、相关文章)链接。不要提交任何不满足这些条件的 URL。for p in /blog/new-post /zh/blog/new-post; do curl -s -o /dev/null -w "%{http_code} $p\n" "https://example.com$p" done curl -s https://example.com/blog/new-post | grep -o '<link rel="canonical"[^>]*>' - IndexNow。
返回 200 或 202 表示被接受(在验证新密钥期间返回 202 是正常的)。403:密钥文件未上线或其内容不一致。422:某个 URL 位于其他主机上,通常是npm run seo:indexnow -- /blog/new-post /zh/blog/new-post npm run seo:indexnow -- --sitemap # 在大版本发布后,或不确定哪些内容已更改时使用www.与裸域名之间的差异。 - 更新队列。 通过将线上 sitemap 与已提交的快照进行差异对比,找出自上次运行以来新增的内容(首次运行时,只需保存快照;
--dry-run不需要密钥):队列排序依据:(1) 今天发布的页面,最新的优先;(2) 主要语言优先于翻译,例如英语优先于中文;(3) 时效性强的主题(版本发布、服务下线)优先于常青内容;(4) 内容发生实质性更改的已有页面。其他语言版本放在最后。node scripts/indexnow.mjs --host example.com --sitemap --dry-run 2>/dev/null | sort > sitemap-now.txt comm -13 docs/seo/sitemap-snapshot.txt sitemap-now.txt # 自快照以来新增的 URL mv sitemap-now.txt docs/seo/sitemap-snapshot.txt - 在 Search Console 中重新提交 sitemap 当添加了大量 URL 或新板块时:Sitemap → 输入
https://example.com/sitemap.xml→ 提交。将“已发现页面”数量与您自己的计数进行比较。它可能会过时:我们的 sitemap 显示 243,直到重新提交后才显示 423。 - 在 Search Console 中请求索引,从队列顶部开始向下操作:
- 打开 Search Console 并检查 URL 中的帐户(
/u/0/、/u/1/、/u/2/)是否显示了该资源。索引在不同日期可能会变化;使用显示该资源的那个帐户。 - 将 URL 粘贴到顶部的检查栏中,等待结果,点击请求索引,等待实时测试完成(大约一分钟)。
- 仅当出现“已请求索引”对话框时才计为成功。没有对话框意味着请求未成功,通常是因为该帐户缺乏权限。
- 首次尝试时出现“出现问题”:重试一次。通常能成功。
- “超出配额”:当日停止操作;配额大约在美国太平洋时间午夜重置。预计每天约 10 个。
- 在队列行中写入日期。
- 打开 Search Console 并检查 URL 中的帐户(
- Bing 提交 URL: Bing 站长工具 → URL 提交 → 提交 URL → 从队列中粘贴接下来的 URL,每行一个,最多不超过页面显示的剩余配额(每天 100 个)。在队列行中写入日期。
- 记录 在
docs/seo/log.md中为每个操作记录一行,并附上部署或提交引用:main=abc1234 已上线。IndexNow 18 个 URL → 200。GSC 请求了 10 个(第 11 个超出配额)。Bing 提交了 100 个,队列中剩余 44 个。
跟进,1 到 3 天后
在 URL 检查工具中检查最新的页面(Bing 也有类似的 URL 检查工具,状态类似):
| 状态 | 含义 | 操作 |
|---|---|---|
| URL 在 Google 中 | 已收录 | 标记为已收录,从队列中移除,记录日志 |
| Google 未知此 URL | 不在 Google 已读取的 sitemap 中,未找到链接 | 重新提交 sitemap,添加内部链接,请求索引 |
| 已发现 - 目前未收录,引用页面:未检测到 | Google 仅通过 sitemap 知道该 URL,尚未抓取 | 从已被抓取和访问的页面添加链接;获取外部链接;请求索引 |
| 已抓取 - 目前未收录 | 已获取但判定为暂不值得收录 | 检查是否存在内容单薄或近似重复(翻译、模板化页面);改进或合并。更多请求无济于事 |
| 重复,Google 选择了不同的规范 URL | 规范标签或 hreflang 混乱 | 修复规范标签;确保不同语言版本的内容不雷同 |
| 重定向页面 / 未找到 (404) | sitemap 中的 URL 错误 | 修复 sitemap |
“引用页面:未检测到”是关键线索:解决方案是添加链接,而不是更多提交。对我们有效的方法是:在页脚添加一个模块,链接来自首页和热门指南的最新五篇文章,在相关文章之间建立交叉链接,以及一个公共 GitHub 仓库,其 README 链接到这些页面。
Search Console 的效果数据存在 2-3 天的延迟。不要根据昨天的数据来判断页面效果。
队列文件模板
# 索引队列
顶部 = 下一个提交。排序:最新的优先;英语和中文优先于其他语言。
限制:Google 请求索引每天约 10 个/资源(大约在美国太平洋时间午夜重置)。Bing 提交 URL 每天 100 个。
| URL | 添加日期 | Google 请求日期 | Bing 提交日期 | 已收录日期 |
|---|---|---|---|---|
| https://example.com/blog/new-post | 2026-11-07 | 11-08 | 11-07 | |
| https://example.com/zh/blog/new-post | 2026-11-07 | | 11-07 | |
检查清单
- 每个 URL 已上线:返回 200,自带规范标签,在 sitemap 中,且被已抓取页面链接
- IndexNow 为新增和更改的 URL 返回了 200 或 202
- 队列已更新并按优先级排序
- 在大量添加后重新提交了 Sitemap,且已发现计数匹配
- Search Console 请求索引达到配额上限,且每个请求都通过对话框确认成功
- Bing 提交 URL 达到配额上限
- 日志行已写入,包含提交或部署引用;已记录后续检查日期
我们踩过的坑
- 请求索引连续三天无效。 从未出现确认对话框。浏览器的默认 Google 帐户没有资源访问权限;在拥有该资源的帐户(不同的
/u/N/)下打开 Search Console 后立即修复。几天后,该资源又在另一个索引下打开。 - “无效的 sitemap 地址”。 在域名资源上,输入
sitemap.xml会失败;完整的https://example.com/sitemap.xml才能生效。 - Sitemap 计数过时。 在站点有 100 个页面后,Search Console 仍然只显示 11 个已发现页面,直到我们重新提交;后来又是 243 对比 423。
- 无链接页面保持隐身。 两篇没有内部链接的指南在发布数天后仍处于“Google 未知此 URL”状态。
- 配额猜测。 我们最初以为每天大约可以请求 4 次;实际上是大约 10 次。第 11 次会返回“超出配额”。
- 当天的首次请求失败,显示“出现问题”。重试后成功。
- 队列丢失。 一个包含 115 个 URL 的 Bing 列表保存在临时文件夹中,会话重启后丢失,我们不得不从 sitemap 重新构建。请将队列保存在仓库中。
- 队列超过配额。 在忙碌的一天后,115 个 URL 等待 100 个 Bing 提交名额。优先级顺序决定了哪些先提交:英语和中文的新文章优先,翻译其次。
- 会话中没有浏览器。 Search Console 和 Bing 需要浏览器;IndexNow 不需要。运行 IndexNow,记录差距,在下一次会话中补上。
- 202,然后是 200。 IndexNow 对于使用新密钥的首次提交返回 202,之后返回 200。两者都是成功。
- 翻译内容淹没了配额。 在 441 个 sitemap URL 中,大约 392 个是翻译。手动提交所有这些翻译会耗尽多日的配额,而这些页面在新域名上很少能被收录。
相关技能
- seo-page:构建本技能用于收录的页面。
- programmatic-pages:一次性发布大量 URL;队列优先级在此技能中最为重要。
- multilingual-seo:应优先发布和提交哪些语言版本;hreflang。
- competitor-pages, trend-keywords:时效性强的页面应排在队列最前面。
- keyword-research:决定哪些页面应该存在。
- ai-search:针对 AI 爬虫的 llms.txt 和 robots.txt;Bing 的索引也为 Copilot 提供数据。
- seo-daily-report:报告哪些页面已被收录以及哪些页面排队等待明天处理。