很多人把 sitemap 当成“提交即收錄”的開關:文件放到根目錄、在後台点一下提交,然後每天看收錄數有没有涨。實际情况是,sitemap 只做一件事——把一批 URL 摆到搜尋引擎面前,让它知道“這些地址存在”。至于要不要抓、抓了算不算數,取决于這些 URL 自身的狀態。下面這几類地址,寫進 sitemap 基本等于白寫。
一、先明确 sitemap 的作用邊界
sitemap 提供的是發現线索,不是抓取指令,也不是收錄保證。它能帮新頁面、内鏈稀少的孤立頁面更快進入待抓队列,但它覆盖不了 robots.txt 的規則,也推翻不了頁面上的 noindex。当一份 sitemap 里大部分 URL 都被別的規則否掉时,蜘蛛對這份文件的信任度會下降,後續新加的地址可能被一起忽略。
二、寫了也不會被處理的几類 URL
1. 被 robots.txt 禁抓的目錄
最常见的一類。為了省资源,把 /search/ 或 /tag/ 整段 Disallow,同时又把這些地址放進了 sitemap。蜘蛛讀到地址後去請求,被 robots.txt 拦住,只能放弃這一次。如果頁面本身没有索引需求,就從 sitemap 里删掉;如果希望被收錄,要先把對應的 Disallow 解開,而不是反复提交。
2. 頁面自带 noindex 的
有些站点在測試环境或某些模板頁面上留了 noindex,上线时忘了摘;也有人以為“先 noindex 再放進 sitemap,蜘蛛抓一次就能看到内容”。noindex 的含义就是不要收錄,和 sitemap 的目标正好相反。這類 URL 出現在 sitemap 里,除了浪費一次抓取額度和一條记錄,没有別的效果。
3. 會跳轉或直接报错的地址
已经 301 到別處的舊地址、返回 404 或 410 的失效地址、跳轉鏈超過两三跳的地址,都不适合放在 sitemap 里。sitemap 應该只列最终可訪問的規范地址。跳轉本身不是問题,問题在于把跳轉的起点当成终点提交,蜘蛛每次都得多绕一圈,還可能拿到不一致的信号。
4. canonical 指向別處的頁面
頁面 A 的 canonical 寫着頁面 B,而 sitemap 里同时列了 A 和 B。這时 A 的信号會被合並到 B,A 自己不太可能單獨保留一條索引记錄。把 A 繼續留在 sitemap 里,只會让“到底该提交哪些地址”這件事變得更模糊。
5. 參數變体和重复地址
?sort=、?page=、?utm_source= 這類變体如果全部机械地寫進 sitemap,等于把同一批内容重复提交很多次。结果是抓取被摊薄,真正的新頁面排得更靠後。通常只保留基础地址,以及确實有獨立内容的分頁地址即可。
三、格式和寫法上的坑
- 地址要寫完整,包含协议和域名,相對路径不會被正确解析。
- 大小寫、尾斜杠要和线上實际地址一致,否則會平白多出一次跳轉。
- 中文或特殊字符的地址需要轉义,直接贴原始字符容易解析失敗。
- 文件本身要能正常訪問,返回 200 且為 XML 内容類型;被防火墙或登入墙挡住就無效。
- 單文件有數量和体积上限,超出部分要拆成多個 sitemap,再用索引文件串起来。
- lastmod 寫得不准确,比如每次生成都刷成目前時間,會削弱這個字段的可信度。
四、提交之後怎么自查
- 在服務器日誌里筛出蜘蛛對 sitemap 文件的請求,看它是否定期来取、是否取到了完整内容。
- 抽一批文件里的地址,逐個確認狀態碼、canonical、meta robots 是否一致。
- 把 sitemap 地址和站点實际可訪問頁面做一次對帳,找出只存在于一邊的地址。
- 把長期没有被訪問的老地址清出去,让文件保持精简,重点放在真正需要的頁面上。
把 sitemap 当成“待办清單”而不是“收錄清單”,很多困惑會简單很多:它只负责让蜘蛛知道地址存在,剩下的由頁面自己的狀態决定。
五、小结
sitemap 的價值在于减少“這個頁面没人知道”的情况,它解决不了“頁面不想被收錄”或者“頁面本身有問题”的情况。定期清理無效行、保持提交地址與线上一致,比反复提交同一份文件更有意义。