Canonical、301/308 重定向、noindex、robots.txt 和移出 Sitemap 有什么区别?
五种方法快速对比
方法 用户访问旧 URL 爬虫能否请求内容 主要目标 是否保证立即生效 常见误用
-- --- --- --- --- ---
rel="canonical" 仍看到原页面 可以 合并重复或近似页面信号,指定首选 URL 否,是规范化信号 用它代替真正迁移或删除
301/308 被转到新 URL 先收到重定向 永久迁移资源 否,搜索系统仍需重新抓取处理 把所有旧页重定向到首页
noindex 页面正常打开 必须能抓取才能看到规则 让页面退出支持该规则的搜索索引 否,需要重新抓取 同时 robots.txt Disallow
robots.txt 页面仍可能打开 对遵守规则的爬虫受限 管理抓取流量 不保证不被索引 把它当隐私或退索引工具
移出 Sitemap 页面照常打开 仍可从链接发现和抓取 停止 Sitemap 中的推荐/首选信号 不保证退索引 以为删除一行就删除搜索结果
选择前应先写清目标:URL 是否还要给用户访问,内容是否有新地址,页面是否重复,还是只想降低无价值抓取。目标不同,正确组合也不同。
Canonical:首选网址信号,不是跳转或禁止索引
rel="canonical" 用于重复或高度相似内容。重复页面返回 200,用户仍可访问;canonical 只是告诉搜索系统哪个 URL 更适合作为代表。Google 官方把重定向和 canonical 都视为较强规范化信号,把 Sitemap 收录视为较弱信号,并说明多个一致信号可以叠加。
规范页最好使用自引用 canonical。重复页指向同一规范 URL,内部链接和 Sitemap 也保持一致。若 HTML canonical 指向 A、HTTP Link 头指向 B、Sitemap 又列出 C,搜索引擎需要自行判断冲突,站点就失去可预测性。
Canonical 是提示而非绝对命令。目标页面不可抓取、返回错误、内容明显不同或形成链与循环时,搜索系统可能选择其他规范 URL。验证不能只查看源码标签,还要检查 HTTP 最终响应、渲染后 head、目标可访问性和搜索工具实际选择的 canonical。
如果旧 URL 已永久废弃且所有访问者都应去新 URL,服务器重定向通常比保留 200 页面加 canonical 更清晰。Canonical 更适合确实需要并存的筛选参数、打印版、追踪参数或近似内容页面。
301 与 308:永久迁移并改变访问路径
301 和 308 都表达永久重定向,响应通过 Location 指向新 URI。RFC 9110 说明,308 明确要求自动重定向时不得改变请求方法;301 在历史客户端行为中允许 POST 被改为 GET。因此普通网页 GET 迁移中两者都常见,但 API、上传或非 GET 请求必须认真评估方法保留语义。
重定向不仅给搜索引擎信号,也直接改变用户和客户端行为。应建立一跳映射:旧页 A 直接到最相关的新页 B,避免 A→B→C 长链。不要把大量互不相关的旧页面全部指向首页;这会损害用户体验,也不能可靠替代逐页内容迁移。
迁移前后要保留路径、查询参数和内容对应关系,更新内部链接、canonical 与 Sitemap,并保持旧重定向足够长时间。只在搜索系统看似更新后立即删除旧规则,外部链接、书签和低频爬虫仍可能落到错误页面。
301/308 不适合暂时维护或短期实验;临时位置变化通常评估 302/307。永久重定向也不是访问控制,任何知道新 URL 的用户仍可访问内容。
noindex:让可抓取页面退出索引
noindex 可以通过 HTML meta robots 或 HTTP X-Robots-Tag 返回。后者适用于 PDF 等非 HTML 资源。Google 官方明确说明,要让 noindex 生效,爬虫必须能够访问页面并读取规则。
页面已经在索引中时,添加 noindex 后仍需要等待重新抓取,搜索结果才会更新。URL 很少被抓取时可能需要较长时间。验证应查看线上响应与 URL 检查工具获取的版本,而不是只检查 CMS 后台开关。
noindex 与 canonical 表达不同意图。Canonical 说“把这页当作另一个相似页面的版本”,noindex 说“不要索引这页”。在同一页面同时发出两种信号会让目的含糊;如果是重复页希望信号合并,优先建立一致 canonical;如果内容必须退出搜索结果,使用 noindex 或真正移除。
noindex 也不是隐私保护。页面仍公开可访问,任何人知道地址都能打开。敏感内容应使用认证授权、移除资源或其他访问控制,不能依赖搜索引擎自愿遵循元数据。
robots.txt:控制抓取,不保证退索引
robots.txt 位于主机根路径,向遵守 Robots Exclusion Protocol 的爬虫声明可否请求某些路径。它主要用于管理抓取流量和避免抓取低价值 URL,不负责删除已经索引的页面,也不是安全边界。
Google 官方说明,被 robots.txt 禁止抓取的网页 URL 仍可能因外部链接而出现在搜索结果中,只是无法抓取内容生成完整摘要。更关键的是,如果页面同时包含 noindex,但被 Disallow,Googlebot 无法访问页面,也就看不到 noindex。
因此,从索引移除公开页面时,不要先禁止抓取。应暂时允许支持规则的搜索爬虫获取 noindex,等处理后再根据抓取目标评估 robots.txt。对真正私密页面则应直接认证或删除,不能为了让 noindex 可见而公开敏感资源。
robots.txt 的作用域由协议、主机和端口决定。https://example.com/robots.txt 不自动控制其他子域名。修改后要验证准确主机、HTTP 状态、重定向、编码和规则匹配,而不是只在本地文件中搜索一行。
从 Sitemap 移除:停止推荐,不是删除命令
Sitemap 帮助搜索引擎发现 URL,并能提供规范 URL 偏好。将 URL 移出 Sitemap,只表示站点不再通过这份 Sitemap 推荐它;该 URL 仍可能从内部链接、外部链接、历史记录或其他 Sitemap 被发现和抓取。
因此,已删除页面应返回合适的 404/410,迁移页面应重定向,保留但不索引页面应 noindex。仅移出 Sitemap 而继续返回 200、保留内部链接,搜索引擎没有充分理由将其移出索引。
Sitemap 应列出希望出现在搜索结果中的规范 URL。不要同时列出重定向 URL、noindex URL、404 URL 和重复参数页,否则提交信号彼此冲突,也会污染 Sitemap 报告。更新 lastmod 只能反映页面有实质修改,不能用当前时间批量刷新来强迫抓取。
常见目标应该怎样组合
永久更换 URL:旧 URL 返回 301 或 308 到对应新 URL;新页面返回 200、自引用 canonical,并出现在内部链接与 Sitemap 中;旧 URL 从 Sitemap 移除。迁移期间监控重定向链、404 和搜索系统选择的规范页。
重复页面必须并存:重复版本返回 200并 canonical 到首选页,内部链接尽量指向首选页,Sitemap 只列首选页。不要用 robots.txt 阻止重复页,否则爬虫难以读取 canonical。
公开页面不应出现在搜索结果:页面保持可抓取并返回 noindex,同时从 Sitemap 和重要内部发现入口移除。确认搜索系统重新抓取并处理后,再根据抓取预算决定是否需要其他规则。
页面彻底删除且无替代:返回真实 404 或 410,移除内部链接和 Sitemap。不要把所有删除页跳到首页,也不要继续返回“未找到”文本但 HTTP 状态为 200 的软 404。
敏感页面:使用登录、权限检查或移除资源。robots.txt、noindex、canonical 和 Sitemap 都不能代替访问控制。
冲突信号如何排查
先对每个 URL 记录单次请求的状态码、Location、最终 URL、canonical、robots meta、X-Robots-Tag 与 robots.txt 匹配结果。然后检查 Sitemap 与内部链接指向。不要只查看浏览器最终页面,因为自动跳转会隐藏中间响应。
常见冲突包括:重定向目标 canonical 回旧 URL;noindex 页面仍被列在 Sitemap;robots.txt 阻止爬虫读取 noindex 或 canonical;多个重复页互相 canonical;移动版与桌面版注释不一致;JavaScript 渲染后覆盖服务端 canonical。
修复时一次明确一个目标,并让所有信号一致。搜索工具的状态更新需要重新抓取和处理,不能在几小时内反复切换配置。保留变更时间、受影响 URL 样本和前后响应证据,才能区分缓存延迟与配置回归。
参考资料
Google Search Central, Canonical URL methods: https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
Google Search Central, Block indexing with noindex: https://developers.google.com/search/docs/crawling-indexing/block-indexing
Google Search Central, Introduction to robots.txt: https://developers.google.com/search/docs/crawling-indexing/robots/intro
Google Search Central, Build and submit a sitemap: https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap
Google Search Central, Site moves with URL changes: https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes
RFC Editor, RFC 9110 — HTTP Semantics: https://www.rfc-editor.org/info/rfc9110/
RFC Editor, RFC 6596 — The Canonical Link Relation: https://www.rfc-editor.org/info/rfc6596/