做站点运营时经常遇到一种别扭的情况:Sitemap 里老老实实列了几百个 URL,但内链几乎没有指向它们;反过来,导航和正文里天天在点的页面,Sitemap 文件翻遍了也找不到。两种信号不一致时,蜘蛛会如何处理?先把结论放在前面:抓取靠链接,申报靠 Sitemap。Sitemap 是告诉搜索引擎“这些地址存在、大概什么时候变过”,而蜘蛛真正走通一条路径,靠的是从一个已有页面点进去的链接。
Sitemap 和内链,本来就不是一回事
Sitemap 解决的是“发现”问题:一个完全孤立、没有任何内链指向的 URL,如果没有 Sitemap,蜘蛛几乎没有机会知道它存在。内链解决的是“路径”问题:即使 Sitemap 列得很全,如果页面之间不互链,蜘蛛抓到之后也走不深,后续的重新抓取更依赖它自己排出的优先级。
两者的定位不同,所以“不一致”本身不一定是错误。真正需要关注的是,当两份信息明显冲突时,蜘蛛会表现出什么行为。
三种常见的不一致,以及蜘蛛的实际反应
一、Sitemap 里有,内链里没有
这类 URL 属于“被申报的孤儿”。蜘蛛通常还是会来抓一次,但抓完之后,如果没有别的页面链接指向它,它就很难再被排进下一轮。更新频率低的页面,可能几个月都不再被访问。
如果这类页面本身重要,正确做法不是反复重提交 Sitemap,而是在相关的内容页里补一条自然的上下文链接。
二、内链里有,Sitemap 里没有
只要页面能被正常爬取的链接点到、又没被 robots.txt 挡住,蜘蛛照样会抓,也会顺着它往下走。Sitemap 缺了这些 URL,主要影响两个地方:一是新页面首次被发现的时间可能变长;二是你失去了一个主动声明“这页更新过”的渠道。
这类不一致通常无害,但数量一多,说明站点地图的维护流程已经和内容更新脱节了。
三、两边都写了,但写法不同
这是最容易被忽略、也最容易造成浪费的一种。导航里写的是带 www 的版本,Sitemap 里写的是不带 www;内链用大写路径,Sitemap 用小写;一边带尾斜杠一边不带。写法分叉之后,蜘蛛可能把它们当成不同的入口,反复请求、反复跳转,日志里看起来抓取量很大,实际有效页面没几个。
怎么核对:日志比猜测可靠
想知道蜘蛛到底听了谁,最直接的办法是看服务器日志里的抓取记录。可以重点看三类 URL:
- Sitemap 里有、日志里长期零抓取的,多半是缺内链通路;
- 日志里抓得很勤、但不在 Sitemap 里的,说明内链路径是通的,只是没被申报;
- 同一内容出现多种写法、且都在被反复抓的,属于归一化问题,先统一入口写法。
日志里的 User-Agent、状态码、访问时间这几列,基本能还原出一条路径是断在哪一步。
一个简单的自查顺序
- 导出 Sitemap 里的全部 URL,和日志中实际被访问的 URL 做一次差集。
- 对“只在 Sitemap、从未被抓”的 URL,回到页面上找它有没有内链入口。
- 对“只在日志、不在 Sitemap”的 URL,判断是值得保留的页面,还是参数页、重复页。
- 统一 URL 写法:协议、域名、大小写、尾斜杠、默认文档,只保留一种。
- 把确认要长期维护的 URL 补进 Sitemap,同时补上至少一条内链。
别把 Sitemap 当成抓取开关
Sitemap 的作用更像一份提交给搜索引擎的清单,它不能替页面建立通路,也不能保证某个 URL 一定被抓。反过来,内链通路建立得好,即使站点地图暂时不完整,蜘蛛也不会找不到内容。
比较稳妥的状态是:Sitemap 覆盖你希望长期维护的全部 URL,内链让这些 URL 至少有一条路径可达,两者写法一致。做到这三点,就已经避开了大部分“申报了却没人来”的问题。
把 Sitemap 当作申报清单,把内链当作通路,两者对齐之后再谈其他优化,顺序会更顺。