对蜘蛛池入口页来说,sitemap 经常被当成一个“提交完就等收录”的按钮。实际它更像一张地图,告诉蜘蛛哪里有 URL,但它不决定蜘蛛是否愿意抓、是否值得收录。把这一点先摆正,后面的取舍会容易很多。
一、sitemap 在蜘蛛池里解决什么问题
入口页数量多、更新频繁时,蜘蛛靠内链和外部链接慢慢发现 URL,效率并不稳定。sitemap 提供的是一条相对直接的发现通道,尤其适合新入口页,或者内链层级较深、靠点击很难到达的页面。
sitemap 只影响“发现”,不保证“抓取”和“收录”。把它当辅助,不要当投放开关。
二、该放进 sitemap 的 URL
- 状态正常、返回 200 的入口页;
- 你希望被发现的少量目标页;
- 内链层级较深、蜘蛛很难顺链走到的页面。
如果入口页本身设置了 canonical,sitemap 里放 canonical 指向的那个版本即可,不要放已被 canonical 掉的重复 URL,否则等于给蜘蛛两份互相打架的地址。
三、不建议放进去的类型
- 已验证 404、410 或长期超时的 URL;
- robots.txt 里已经屏蔽的路径;
- 带 session id、排序参数、筛选参数的页面;
- 大量同一模板、正文几乎相同的入口页。
模板化严重的蜘蛛池入口页,如果把成千上万个几乎一样的 URL 全塞进 sitemap,容易让蜘蛛对整批 URL 的抓取价值打问号。可以先放一部分有代表性的入口页,观察抓取反馈,再决定是否扩大范围。
四、XML、txt 还是 sitemap 索引
少量 URL 用 txt 最省事,一行一个完整地址,不需要 XML 头和转义。需要写 lastmod、或者数量较多时用 XML。文件数量多、单个文件接近上限时,用 sitemap 索引文件把多个子 sitemap 串起来。
常见做法是单文件控制在 5 万条 URL、50MB 以内;具体以搜索引擎文档为准,但没必要贴着上限堆。
lastmod 填真实的最后修改时间。如果每次生成 sitemap 都把 lastmod 刷成当前时间,蜘蛛几次对比后可能不再信任这个字段。
五、放置与声明
- XML 放根目录,命名为 /sitemap.xml;
- 在 robots.txt 里用 Sitemap 指令声明完整地址;
- 确认返回 200,Content-Type 为 XML 或 text/plain,编码 UTF-8;
- 抓取一次,看是否有重定向、超时、压缩错误或 BOM 头。
如果 sitemap 地址本身还要 301 跳一次,蜘蛛可能仍会跟进,但不如直接给最终地址省事。
六、几个常见误区
- 以为 sitemap 越大越好,结果里面大半是 404 或重复页;
- sitemap 里放屏蔽 URL,与 robots 规则互相打架;
- 用 changefreq 和 priority 试图影响抓取频率;
- 只在文件里堆 URL,从不看日志里蜘蛛实际抓了什么。
changefreq 和 priority 现在多数搜索引擎已经弱化甚至忽略,不必在这两个字段上花太多时间。
七、什么情况下先撤掉 sitemap
如果你在日志里看到 sitemap 中的 URL 大量返回 404、超时,或者蜘蛛每次来都只抓 sitemap 里的低质重复页,而目标入口页长期没动静,可以先缩小 sitemap 范围,甚至暂时撤下。减少无效 URL 的暴露,比继续堆量更有价值。
八、小结
蜘蛛池入口页的 sitemap 应该是一份“可信清单”,而不是 URL 仓库。放可访问、有区分度、你希望被发现的地址;保持 lastmod 真实;定期用日志验证蜘蛛抓了什么。把它当 URL 发现的辅助通道,别指望它单独解决收录问题。