Skip to content

第 13 章 抓取与索引控制:让正确页面进入正确队列 ​

13.1 页面能打开,为什么还是搜不到? ​

一篇文章已经发布,浏览器里也能正常打开,搜索引擎却迟迟没有收录。此时该检查服务器,修改 robots.txt,还是继续申请索引?如果还没分清问题发生在哪一步,这些操作很容易互相抵消。

本章沿着这个问题往下查:先看搜索引擎能否取得页面,再看网站有没有要求它排除页面,最后检查重复内容应该使用哪个地址。读完后,你应能为商品、文章、站内搜索和登录页面选择合适的控制方式,并找出 robots.txt、noindex、canonical、重定向与站点地图之间的冲突。

先把容易混在一起的三件事分开:

要问的问题主要检查什么通过后仍不能证明什么
访客能不能访问?服务器响应、登录与权限爬虫一定会来访问
爬虫能不能取得内容?发现入口、抓取规则、服务器容量页面一定会进入索引
页面是否被索引并展示?索引指令、规范地址及搜索引擎的后续处理某个关键词一定有好排名

例如,页面返回 200,也没有任何禁止标记,只说明技术障碍较少。搜索引擎是否选择收录,还需要继续观察。能够访问、允许索引、实际被索引,是三种不同的状态。

在动配置之前,先写下每类页面的用途。以假设的 Go 工具 SaaS 为例:公开工具介绍和帮助文章希望被找到;带用户输入的临时结果不希望公开;账户页必须登录;打印视图与原文相同,希望合并;旧文档被新地址替代,希望永久迁移。

这张“页面意图表”会决定后面选哪一种工具。否则,报告里所有“未索引”看起来都像故障,你可能花时间修复了本来就该排除的页面。

13.2 robots.txt:告诉爬虫哪些路径不要抓取 ​

robots.txt 是站点根路径下的文本文件,例如 https://example.com/robots.txt。它向遵守协议的爬虫声明允许和禁止抓取的路径。Google 明确指出,禁止抓取的 URL 仍可能因为外部链接等信号出现在搜索结果中;因此,robots.txt 不等同于阻止索引,更不是访问鉴权。[D01] 协议本身由 RFC 9309 描述,它是一套爬虫应遵循的约定,不构成服务器访问控制。[D24]

以下是教学示范,未对真实站点执行或验证:

text
User-agent: *
Disallow: /internal-search/
Disallow: /temporary-export/

Sitemap: https://example.com/sitemap-index.xml

这段规则有两个前提:站内搜索生成的组合没有独立搜索价值,临时导出文件也不需要被搜索引擎发现。在这两个前提成立时,可以告诉爬虫不要抓取这些路径。

但文件能否被别人下载,是另一个问题。假如导出文件包含客户数据,就要做身份验证、授权检查,并设置有效期。robots.txt 本身是公开可读的,把目录名写进去并不能保护它。

编写规则需要用具体 URL 逐条测试。/product/ 与 /products/ 不是同一段路径;查询参数顺序变化可能让过于简单的匹配漏掉地址;大小写、尾斜杠和编码也可能改变服务器解释。不要因为爬虫识别某个语法,就假定所有搜索引擎都相同。Google 专用规则、通配规则和其他爬虫规则要分别验收,无法核实支持情况的扩展字段不应作为关键控制。

Google 的具体匹配规则还需要记住几点:路径区分大小写,星号匹配零个或多个字符,美元符号限定结尾;同一适用规则组中,更具体的路径规则优先,同等具体程度发生冲突时采用较宽松规则。爬虫专用组也不能想当然地继承通配组的全部限制;Google 不支持 crawl-delay。[D47]

下面是独立的教学示范,未运行,不能与前一段配置不加检查地合并:

text
User-agent: *
Disallow: /archive/
Allow: /archive/public/
Disallow: /*?print=1$

这份配置希望允许公开归档子目录,同时禁止其余归档路径,并匹配以指定打印参数结尾的地址。验收至少应比较 /archive/a、/archive/public/a、/a?print=1 与 /a?print=1&lang=zh。最后一个地址不能仅凭外观就假定命中带结尾限定的规则。这也是为什么测试应使用实际 URL 样本,而不能只检查文件看起来是否整齐。

规则写对了,还要确认部署出去的确实是这一份。测试环境的 Disallow: / 被带到正式站、发布脚本生成了空响应、CDN 缓存了另一主机的文件,都会让线上行为偏离你的预期。

因此,建议把 robots.txt 纳入版本控制,并在部署检查中明确断言“生产关键页面不得被屏蔽”。样本除了首页,还要包含商品、文章、图片和渲染所需脚本。只放行网页、却挡住核心脚本,仍可能让爬虫看不到完整内容。

robots.txt 本身的错误响应还会影响全站抓取:Google 将除 429 外的 4xx 视为没有该文件、没有抓取限制;遇到 5xx 则会先暂停抓取,之后的处理取决于已缓存规则、故障持续时间和站点可用性。不要把“文件打不开”理解成“全部禁止”,也不要把它与普通内容页的 404 混为一谈。[D47]

robots.txt 的作用范围应按实际协议、主机与端口核对。不要修改 www 主机后,就默认另一个子域已经同步。部署验收时列出所有对外主机,分别访问其根路径文件,记录响应码、内容、缓存头和检测时间。内容分发网络、反向代理和应用程序可能各自产生一个版本,浏览器看到的版本未必代表所有边缘节点。

13.3 noindex:要排除页面,先让爬虫读到指令 ​

上一节的 robots.txt 控制抓取。假如一个页面仍然允许公众访问,只是不想让它出现在搜索结果里,就需要了解 noindex。它通常写在 HTML 的 robots 元标记,或 HTTP 的 X-Robots-Tag 响应头中,用来要求支持该指令的搜索引擎排除这个资源。

这里有一个很容易忽略的前提:爬虫必须先读到指令。如果你同时用 robots.txt 禁止抓取,爬虫便无法取得页面,也就看不到新加的 noindex。把 noindex 改写到 robots.txt 里也不行,Google 不支持这个字段。[D02]

以下两段是不同资源类型的教学示范,不是应同时复制到所有页面的模板:

html
<!-- 用于仍允许公开访问、但不希望进入索引的 HTML 页面 -->
<meta name="robots" content="noindex">
text
HTTP/1.1 200 OK
Content-Type: application/pdf
X-Robots-Tag: noindex

第一段通常放在 HTML 的 <head> 中,可用于没有搜索价值的公开筛选结果;Google 也会遵循正文中的 robots 元标记,因此排错时不能只搜 <head>。第二段的 X-Robots-Tag 是服务器实际发送的响应头,不能当作一行文字贴到 PDF 或网页正文里。[D26] 给公开价格手册加 noindex 与保护内部合同是不同需求。前者可能只是不希望它独立展示,后者应首先限制访问。

“我已经加了 index,怎么仍不收录?”先检查应用、CMS、代理和 CDN 是否共同发出了另一条 noindex。Google 对冲突的机器人指令采用更严格的有效规则;一个宽松标签并不会自动抵消另一个限制。[D26] 建议在审计中分别保存原始响应头、原始 HTML 和渲染后的 HTML,而不是只搜索模板文件。模板是意图,线上响应才是证据。

你可能还会看到与 noindex 并列出现的 nofollow。前者涉及当前资源是否索引,后者涉及页面中链接的处理。排除一张临时结果页,并不意味着一定要同时限制所有链接的处理。

页面入口也要单独考虑。重要内容如果只能从这张临时页面找到,就不宜长期依赖它作为唯一的发现路径。更稳妥的结构是从公开分类页或帮助中心提供清晰链接。

需要从搜索中移除已经公开的敏感信息时,不能只等一个标签慢慢生效。应先在源站切断未经授权的访问,检查缓存、共享链接和其他副本,再按相关搜索引擎的移除流程处理。索引控制的目标是搜索展现,数据泄露的目标是访问边界,不能混淆。

只限制摘要时,不必排除整页 ​

若页面仍希望出现在搜索中,只是不想让某段公开文字进入摘要,可在相应的 span、div 或 section 上使用 data-nosnippet。nosnippet 则限制整页的文字摘要和视频预览,max-snippet:120 表达文字摘要最多 120 个字符;这些都不同于 noindex。[D26]

html
<!-- 可放在正文中的教学示例,内容仍对访客公开 -->
<p>查看部署步骤与适用版本。</p>
<div data-nosnippet>本段公开的活动说明不用于搜索文字摘要。</div>

发布后检查实际 HTML,确认属性包住了正确范围,并允许 Google 再次抓取。它不隐藏页面内容,也不阻止他人复制;结构化数据中主动提供的信息还需另外检查,不能假定这些摘要设置会一并封住富结果字段。真正的私人信息应先限制访问,而不是使用摘要控制。

13.4 canonical:为重复内容选择代表地址 ​

规范网址标记 canonical 用于表达重复或非常相似页面的首选地址。它是信号而非强制命令。Google 将重定向与 canonical 视为较强的规范化信号,将站点地图收录视为较弱信号;多个一致信号可以共同表达偏好。[D03] 教学示范如下:

html
<link rel="canonical" href="https://example.com/tools/json-format">

这个 HTML 链接标签必须位于有效的 <head> 中。PDF 等非 HTML 资源可由服务器发送 Link: <https://example.com/preferred>; rel="canonical" 响应头表达首选地址;目标仍须是真正对应的重复内容,不能任意指定。[D03]

设想 /tools/json-format、/tools/json-format?utm_source=newsletter 和 /tools/json-format?view=compact 展示同一个工具、说明与示例,只是跟踪或排版不同,那么把后两者指向干净地址通常容易解释。相反,/tools/json-format 与 /tools/xml-format 是两种工具,即使布局一样,也不应为“集中权重”强行合并。

怎样判断两个地址是否适合合并?可以依次问:用户来完成的任务是否相同,主体内容是否基本相同,目标地址能否长期访问,站内导航是否也使用这个地址。标题相似,并不能替代这些检查。

鞋子的红色和蓝色变体就需要具体判断。如果它们各有图片、库存和搜索需求,独立索引可能有意义;如果只是同一内容的不同入口,情况又不同。决定应来自产品和内容,不能只看 URL 里有没有参数。

自引用 canonical 表示页面把自己的正式地址声明为首选。即使采用这种写法,也要检查生成结果:绝对地址、协议、主机、大小写和路径是否正确,有没有指向测试域名、404 页面、重定向中间站或被禁止索引的目标。

分页尤其容易被误合并。列表第二页装着另一批产品,与第一页的主体内容不同。仅仅因为担心“第二页抢排名”,就把它的 canonical 指向第一页,并不符合重复内容规范化的目的。

如果你确实不再需要旧地址,重定向通常比保留两页再规范化更贴合用户体验;如果两个地址都必须可访问,且内容确实近似,canonical 才更合适。不要同时向搜索引擎表达“请合并到甲”和“请删除乙”并假设必然按你的理想顺序执行。尤其是 noindex 与 canonical 混用,应回到业务目标选择清楚策略,而不是把所有控制叠加。

13.5 站点地图:列出希望被发现的正式地址 ​

XML 站点地图 sitemap 是给搜索引擎提供 URL 及相关更新信息的机器可读目录。它有助发现,不保证抓取、索引或排名。Google 文档列出的单文件限制是未压缩体积不超过 50MB、URL 不超过 50,000;较大集合应拆分,并可由站点地图索引组织。Google 忽略 priority 与 changefreq 字段,因此不要为这两个数值耗费运营时间。[D04]

以下是教学示范,日期只是示例数据:

xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/guides/go-json</loc>
    <lastmod>2026-10-01</lastmod>
  </url>
</urlset>

地图里的 URL 从哪里来,比文件写得多漂亮更重要。建议从已发布、允许索引的规范内容记录生成,而不要把数据库中每个路由都导出。为此,内容记录需要明确的发布状态、主 URL、更新时间和删除状态。

生成后先检查 XML 格式、绝对 URL、字符转义、重复项和文件大小,再抽样请求其中的线上地址。语法正确只能证明文件能被解析,不能证明它列出的页面真的可用;当然,也不必每次都重新抓取全站。

lastmod 应反映有意义的内容变化,而不是站点地图重建时间。假设一篇文章只被重新部署,正文和结构没有变化,不必伪装成今天更新;商品价格、库存或重要说明改变则应按实际生成机制判断。工程上最好让更新时间来自内容记录或明确的内容变更事件,避免由服务器当前时间统一覆盖。

拆分地图还可以服务诊断。内容站可按文章、栏目拆分;电商可按商品、品类拆分;多语言站可按语言或业务单元拆分。目的不是人为制造更多地图,而是让“哪类预期页面出现异常”更快可见。已经删除、重定向、明确 noindex 的 URL 若长期留在地图里,会使信号和审计口径互相矛盾。

文件准备好后,按下面的顺序发布并检查:

  1. 放到可公开读取的稳定地址,通常使用站点根目录。访问该地址,确认返回 XML,而非登录页或错误页。
  2. 在已验证的网站 Search Console 资源中打开“站点地图”报告,提交地图或地图索引的地址。也可以通过 robots.txt 中的 Sitemap: 行告知位置。
  3. 查看上次读取时间、处理状态和具体错误。报告显示“成功”,说明地图处理成功,不能据此认定所有 URL 都已进入索引。[D04]

13.6 HTTP 状态码要表达真实业务状态 ​

HTTP 状态码是服务器对一次请求的机器可读结果。工程师容易把“浏览器展示了好看的页面”等同于成功,但对客户端而言,200、301、404 和 503 的含义不同。RFC 9110 是 HTTP 语义的一手标准;在做重定向时,尤其要理解 307、308 保留请求方法等协议差异,而不能把 SEO 处理上的相近等同于协议完全相同。[D30]

选择状态码时,先描述资源实际发生了什么:

真实情况响应应表达的含义容易误做的地方
资源存在,正常提供正文成功仅凭模板能显示就认定内容正常
永久换了地址永久重定向新旧地址长期互相跳转
暂时换了地址临时重定向把临时安排当作永久迁移
没有这个资源不存在显示“找不到”,却仍返回成功
系统暂时无法提供服务服务不可用把数据库超时当成文章已删除

报表是否变绿,不应改变这些业务事实。

Google 对多数 4xx 响应不使用其内容,429 则作为过载信号处理;持续的 5xx 或 429 会影响抓取,长期故障也会影响索引。[D06] 因此,别用 403 当作通用抓取节流手段。若防火墙把正常爬虫误判为攻击,应定位规则、验证请求身份并恢复正常访问,而不是把所有拒绝响应改成空白 200。

软 404 是一种常见误配:服务器返回 200,但正文说明“页面不存在”,或只剩一个无实际内容的错误壳。它常出现在前端路由兜底、商品接口失败和错误的批量跳首页逻辑中。正确修复要区分资源不存在与请求暂时失败。数据库超时不代表文章被删除,直接返回永久不存在可能把一次系统故障转化成索引问题。

缺货商品也不一定该删除。如果商品会补货且页面仍提供型号、参数、说明和替代选择,可以维持真实的商品页并明确库存状态。永久停售且有明确等价替代时,可评估跳转;没有相关替代、没有继续保存价值时,再考虑返回不存在。不要把几千个完全不同的停售品全部跳到首页,因为首页通常不能完成原用户任务。

13.7 抓取预算:先证明存在瓶颈 ​

抓取预算 crawl budget 可以理解为搜索引擎在站点上投入抓取的资源范围。Google 的说明将它与抓取容量限制和抓取需求联系起来,并强调这主要是大型或更新非常频繁站点的问题;文档中的规模数字只是粗略参考。[D05] 一个几十页的个人站没有收录,不应先寻找“提高预算秘籍”。先查是否有发现路径、是否允许访问、页面是否独特、是否选错规范地址。

如果你怀疑抓取资源被浪费,需要把两个现象联系起来:重要 URL 没有及时被访问,同时,可避免的请求或服务器容量问题确实占用了资源。只看到参数页出现在日志里,还不足以证明它们挤占了核心内容。

把请求日志、内容发布时间和期望更新时效放在一起看,才比较容易判断下一步:优化服务器、控制 URL 组合,还是改进页面价值与发现入口。即使没发现容量瓶颈,也仍可能是抓取需求偏低。[D05]

假设一个电商站有两万件商品,而颜色、尺码、排序、库存和每页数量可以自由组合,程序可能生成远多于两万个 URL。优化的重点是控制 URL 生成面:哪些筛选结果值得独立落地,哪些只服务站内操作,哪些组合根本无结果。只在最后给海量页面加 noindex,并不会消除访问这些页面以读取指令的成本。

还有一种瓶颈来自服务器。若每次访问列表都实时查询昂贵聚合,爬虫和用户同时进入时会相互争用资源。可考虑缓存公开结果、预计算稳定列表、优化数据库查询与压缩响应。然而速度改善不会自动制造搜索需求;日志证明抓取变快,只说明传输环节改善,需要继续观察重要页面是否更及时更新。

不要为了“每天都有新东西”批量改标题或更新时间。这样的策略增加版本噪声,也让运营难以判断真正内容变化。先把新增、更新、删除这三个事件做准,再让内部链接与站点地图反映事件,通常比制造虚假更新更易维护。

13.8 把多个控制合起来检查 ​

现在回到开头的“页面意图表”。单个设置已经清楚,组合时就按目的核对:

页面目的组合检查关键冲突
公开并希望索引允许访问、正文正确、无 noindex、规范信号一致一边申请索引,一边发出排除指令
公开可用,但不希望索引让爬虫能够读取 noindex用 robots.txt 挡住读取指令的请求
合并重复内容代表地址可用,内链、地图、canonical 指向一致各个信号选择了不同代表地址
保密实施身份验证与授权误把抓取或索引控制当作访问控制

下面用三个假设故障,把这些检查串成实际排查过程。

第一个案例是响应头里残留了排除指令。假设文章 /guides/go-errors 两周没有进入索引,编辑已经反复点了申请索引。首先保存具体 URL 和发布时间,不要只说“新文章都不收录”。访问线上页面,发现浏览器显示正常,GET 请求返回 200。接着查看 HTML 也没有 noindex,但响应头中存在 X-Robots-Tag: noindex。进一步对比同模板旧文章,只有新的 /guides/ 路径带这个头。

此时合理假设是路径级代理配置,而非文章写作质量。检查发布变更后发现,测试环境的响应头规则被复制到新路由。修复应在产生响应头的组件中移除错误规则,清理相关缓存,并重新请求同一路径和相邻路径。验收不能只看模板差异,因为最初错误就不在模板里。待实际响应正确后,再通过搜索工具核对最近抓取时间与索引状态,不能把“代码已合并”写成“索引已恢复”。

第二个案例是规范地址错误。假设五十篇文章都声明首页为 canonical。先抽取各文章主体,确认它们并非首页副本;再检查模板的 canonical 字段是否为空时回退到站点首页。合理修复是使用各内容记录的正式 URL,并为缺失字段报错,而不是静默回退。随后验证所有受影响模板,特别是语言版本、分页页与预览页,防止只修复一个样本。

第三个案例涉及 robots.txt 与 noindex。某筛选页已被索引,团队先禁止抓取,再添加 noindex,几周后仍看到 URL。这里不应继续加更多标签。先确认该页确实不需要保密,才允许抓取以便读取排除指令;如果涉及隐私,则优先封闭访问并使用适当移除渠道。处理顺序来自目标,不能脱离内容性质套一条万能流程。

交互实验:抓取与索引信号 ​

SEO 实验室 · 抓取与索引信号

配置了,不等于爬虫读到了

先禁止抓取,再加 noindex,能让页面从搜索结果消失吗?亲手改一项设置,沿着证据找答案。

学习目标:分清页面设置、爬虫读到的信号和真实索引状态。这是有限教学案例,不会请求真实网站,也不预测收录。

01 选择一个起点

切换案例会重新演练

标签写了,但抓取入口被挡住。

只放开抓取,观察 noindex 能否被读到。

正常公开页面,也不等于已经收录。

声明原文偏好,最终选择仍待验证。

02 输入 · 页面设置

这些是你配置的内容,不代表爬虫已经取得。

“对应原文”假设两页确实重复,目标正常公开且没有 noindex。这里不比较两页质量。

03 过程 · 逐步取证

每次只推进一步,看哪些信息真正变成了证据。

步骤 0 / 4准备开始
  1. 设置当前
  2. 发现待检查
  3. 抓取尝试待检查
  4. 读取信号待检查
  5. 判断边界待检查

先预测:你配置的信号,爬虫这次能读到哪些?逐步按钮只推进这个假设案例,不请求任何真实网站。

到这一步,实际取得了什么?

未读取的设置,不计入已知证据。

已知 URL
尚未进入发现步骤
抓取许可
尚未检查
实际取得的 HTTP 状态
尚未请求
noindex
尚未检查
canonical
尚未检查
Google 选定的规范版本
未知,本实验不作选择
真实索引状态
未知,需核对实际记录

04 结果 · 证据能说明什么

走完取证步骤后,这里会给出本次判断,以及还需要核对的证据。

记住这三个区别

robots.txt 管抓取;noindex 要先被读到,才表达排除索引的要求;canonical 为重复页面表达首选地址。正常返回 200、没有禁止标记,仍不保证收录。

动手比较:只改一项,为什么结果就变了?
  1. 只放开抓取。先用默认“拦抓+noindex”走到最后,再把抓取许可改成“允许”。noindex 没变,变化的是爬虫终于能读到它。修改设置会暂停播放并从头开始。
  2. 比较两个标签。选“重复版本指向原文”,走到最后。规范版本为什么仍是未知?因为 canonical 只是偏好。再勾选 noindex,观察两种不同目的的设置。
  3. 区分两类错误。把 HTTP 从 200 改成 503,再改成 404。暂时服务故障与资源不存在,需要不同的修复证据。
前提与不模拟的部分

假设 URL 已被发现,robots.txt 文件有效且适用规则已经解析,允许抓取时安排这一次假设请求。200 表示真实、完整、受支持格式的公开 HTML,不是软 404。noindex 与 canonical 均在有效 HTML 中,不依赖 JavaScript。

步骤顺序只用于解释依赖,不代表搜索引擎内部严格串行运行。本实验不解析 robots 路径、请求头冲突、重定向、登录、缓存、渲染、站点地图、抓取预算、内容质量或历史状态。真实系统可能重试、并行或使用旧记录;“已读取”只描述案例,不代表线上验证。

robots.txt 与 noindex 都不保护私人内容。需要保密时,应先设置身份验证与访问控制,不应为了让爬虫读标签而公开敏感资料。

机制依据:Google 官方文档

文档核对:2026-10-14。步骤与预设为教学案例,不是 Google 内部算法。

13.9 可复制的检查流程与验收口径 ​

下面的命令只示范获取证据的方法,未在示例域名执行。真实使用前应替换成自己有权测试的站点,并控制请求速率。

bash
# 使用 GET 获取响应头与正文,避免只看 HEAD 的特殊行为。
curl --compressed -sS -D headers.txt \
  -o page.html 'https://example.com/guides/go-errors'

# 检查状态链;此命令会跟随重定向。
curl --compressed -sS -L -D chain.txt \
  -o final.html 'https://example.com/old-guide'

# 初步查找;复杂 HTML 应使用解析器继续验证。
grep -iE 'x-robots-tag|location|content-type' headers.txt
grep -iE 'canonical|name="robots"|name="googlebot"' page.html

命令结果只能证明这次请求的响应。若涉及地区、移动设备、CDN 缓存或登录态,需要增加对应样本,并记录每次请求条件。搜索引擎工具看到的结果还可能来自过去抓取。URL 检查工具的索引视图与实时测试是两类证据,实时测试通过不保证最终索引,也不能预测最终规范选择。[D28]

修复之后,验收也要分清层次。首先确认线上响应和模板已经符合设计;再确认搜索引擎能取得正确内容;最后观察页面是否进入索引,以及系统实际选择了哪个规范地址。

前面的技术修复可以较快检查,索引变化则需要等待再抓取和后续处理。此时报告“已修复,待重新处理”就足够准确,不必给出没有证据的恢复日期。

对于批量修复,建立固定样本集比临时挑好看的页面更可靠。样本应包括最重要页面、随机页面、边界情况和曾经失败的页面。每个样本保存 URL、期望状态、期望 canonical、期望索引规则、发现入口及检查时间。只要路由、缓存、渲染或 CMS 插件变更,就复用这组样本做回归检查。

练习与参考解答 ​

练习一:保留访问,排除搜索。 一个公开活动归档页仍要让老用户打开,但不希望出现在搜索结果中。它已经被 robots.txt 禁止抓取。直接加 noindex,工作就结束了吗?

参考解答:还没有。先确认页面没有隐私需求,再让爬虫能够读取 noindex,并观察后续处理。如果只是禁止抓取,不能推断已有索引会消失。

练习二:地图很大,内容却不对。 站点地图有十万个 URL,其中一半是重定向旧地址。先提高 priority,还是重建数据源?

参考解答:重建数据源,导出预期索引的规范地址,再按体积和条数限制拆分。修改 priority 不能纠正 URL 集合。

练习三:排序与分页能一起合并吗? 价格排序页与默认分类页包含相同商品,只是顺序不同;第二页则包含另一批商品。这些页面的 canonical 是否都应指向分类首页?

参考解答:不能一起处理。排序变体可以评估合并;第二页包含不同内容,需要独立判断,并提供可抓取的分页链接。

执行清单 ​

  • 给每类页面写明公开、索引、重复合并、删除和保密需求。
  • 同时检查 robots.txt、响应码、响应头、原始 HTML 和渲染结果。
  • 让内部链接、canonical 与站点地图采用一致的正式地址。
  • 保留修复前后的证据、发布版本和搜索引擎最近抓取时间。
  • 分别报告技术修复完成、抓取恢复与索引变化,避免把三者混为一谈。

本章参考来源 ​

[D01] Introduction to robots.txt | https://developers.google.com/search/docs/crawling-indexing/robots/intro | 访问 2026-10-13 | 抓取限制与索引、安全边界的区别。 [D02] Block Search indexing with noindex | https://developers.google.com/search/docs/crawling-indexing/block-indexing | 访问 2026-10-13 | noindex 的实现与可访问前提。 [D03] How to specify a canonical URL | https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls | 访问 2026-10-13 | 规范化信号及其相对性质。 [D04] Build and submit a sitemap | https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap | 访问 2026-10-13 | 地图限制、地址与更新字段。 [D05] Optimize your crawl budget | https://developers.google.com/crawling/docs/crawl-budget | 访问 2026-10-13 | 预算适用范围与资源机制。 [D06] How HTTP status codes affect Google's crawlers | https://developers.google.com/crawling/docs/troubleshooting/http-status-codes | 访问 2026-10-13 | 错误状态和抓取处理。 [D24] RFC 9309: Robots Exclusion Protocol | https://www.rfc-editor.org/rfc/rfc9309.html | 访问 2026-10-13 | robots 协议边界。 [D26] Robots meta tag and X-Robots-Tag specifications | https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag | 访问 2026-10-13 | 索引与摘要指令、正文robots元标记、响应头、data-nosnippet与结构化数据边界。 [D28] URL Inspection tool | https://support.google.com/webmasters/answer/9012289?hl=en | 访问 2026-10-13 | 索引视图与实时测试的区别。 [D30] RFC 9110: HTTP Semantics | https://www.rfc-editor.org/rfc/rfc9110.html | 访问 2026-10-13 | HTTP 与重定向的协议语义。

[D47] How Google interprets the robots.txt specification | https://developers.google.com/crawling/docs/robots-txt/robots-txt-spec | 访问 2026-10-13 | 路径匹配、规则组与不受支持字段。

保留各书来源与许可 · 示例运行条件以正文为准