有些蜘蛛池入口页不再把目标 URL 写成可点击的 a 标签链接,而是只在页面里放一个指向 sitemap.xml 的地址,甚至入口页上什么都不放,只靠 robots.txt 声明 Sitemap。这种做法的实际效果,取决于搜索蜘蛛是否知道这份 sitemap 的存在,以及这份文件本身是否符合解析要求。
sitemap 属于声明式的发现渠道
HTML 链接和 sitemap 是两套不同的机制。前者靠搜索蜘蛛顺着页面爬行,从一个 URL 走到下一个 URL;后者是站点主动列出「我有哪些 URL」的清单,等搜索引擎定期或按需来读取。
入口页只放 sitemap 地址、不放可点击链接,等于把发现路径从「顺着链接走」换成了「等搜索引擎来读清单」。所以第一个要问的问题是:搜索引擎有没有拿到这份 sitemap 的地址?如果地址根本没被读到,页面里写不写链接就没有区别。
页面里的 sitemap 链接,和 robots.txt 的 Sitemap 指令不是一回事
常见有三种写法,效果差别不小:
- 入口页放一个 a 标签指向 sitemap.xml:搜索蜘蛛需要先抓到入口页,再顺着这个链接去抓 XML 文件。多绕了一跳,抓取频率低的时候会更慢。
- 在 robots.txt 中写 Sitemap: 完整地址:这是被普遍支持的方式。搜索引擎抓取 robots.txt 时会读到该地址,并在一段时间内安排抓取。
- 在搜索资源平台后台手动提交:适合新增内容或临时补漏,一般作为补充手段,不代表永久通路。
如果入口页只写了一个 XML 文件地址,既没有可点击链接,robots.txt 里也没有声明,搜索引擎通常不会凭空知道这份文件存在。
sitemap 被真正处理,还要过几道门槛
地址被读到只是第一步,解析环节还有限制:
- 同域限制:一个 sitemap 文件里的 URL,通常需要与 sitemap 所在域名一致,跨域 URL 往往被忽略。
- 可正常访问:返回 200,Content-Type 为 XML 或文本类,且不要被 WAF、登录校验、UA 判断拦住。
- 格式合法:标签闭合、编码正确,<loc> 里是绝对 URL 并对特殊字符做好转义。
- 不被 robots 屏蔽:sitemap 文件本身被 robots.txt 的 Disallow 挡住,会影响读取。
- 规模与质量:单个文件有 URL 数量和体积上限,超出要拆成多个并用索引文件串联;塞满大量重复或低价值 URL,会让这份清单被认真处理的意愿下降。
把入口页当 sitemap 跳板时的常见误区
- 入口页只有 XML 地址,没有可爬的 HTML 链接,发现节奏完全依赖搜索引擎主动读取。
- 多个入口页指向内容几乎相同的多份 sitemap,地址数量堆得很高,但新增内容并不清晰。
- sitemap 里的 URL 与入口页实际暴露的 URL 不一致,出现两套口径,后续很难判断问题出在哪。
- 只改内容不改 lastmod,或者每次都把 lastmod 刷成当前时间,这个字段就失去了参考价值。
- 把 sitemap 当成收录开关,认为写完就一定会被抓取。它只解决发现环节的一部分,不决定抓取和收录结果。
更稳的组合方式
如果目的是让目标 URL 尽早进入发现队列,比较稳妥的做法是几种渠道并行:入口页保留数量受控、结构清晰的 HTML 链接;robots.txt 里声明一份格式正确的 sitemap;新增内容再配合后台提交。三者不冲突,HTML 链接负责顺着爬,sitemap 负责兜底和补充。
sitemap 的作用是「告诉」搜索引擎有哪些 URL,不是「保证」它一定抓取。它影响发现的可能性,不决定最终结果。
排查时,可以分别看 sitemap 文件的抓取记录和入口页的抓取记录:sitemap 从没被抓过,问题在声明和地址;sitemap 被抓了但目标 URL 没动静,问题则在清单内容、格式或后续排队环节。