很多站点把 sitemap 当成一次性的任務:建站时生成一份,提交到搜尋资源平台,然後就再也没有打開過。等到發現新栏目迟迟没有被抓取,回头一看,索引文件里還停留在去年的頁面列表。sitemap 本身不會带来排名,但它是站点向爬虫递交的一份目錄,目錄過期,發現效率就會打折扣。
先想清楚哪些 URL 该進 sitemap
索引文件不是越多越好。把不该出現的地址寫進去,只會稀释重点。一般建议:
- 可以放:首頁、主要栏目頁、正常發布的詳情頁、有獨立價值的聚合頁。
- 不建议放:登入註冊頁、购物车與结算流程頁、站内搜尋结果頁、带大量參數的篩選頁、測試與预览地址、已经下线的頁面。
分頁列表頁可以酌情處理:如果每頁内容差异明顯,可以保留;如果只是同一批内容的翻頁,建议用 canonical 指向主列表,而不是把翻頁地址全部塞進索引文件。
常见的几類問题
- 内容過期:頁面已经刪除或改版,sitemap 里還留着舊地址,爬虫反复訪問得到 404,白白消耗抓取額度。
- 覆盖不全:只寫了首頁和少數栏目,新發布的詳情頁依赖内鏈被動發現,速度慢而且容易漏。
- 格式不合規:编碼不是 UTF-8、标簽未閉合、命名空間寫错,解析失敗之後整份文件等于没有提交。
- lastmod 失真:所有 URL 的更新時間都是同一天,或者干脆不寫。這個字段只有在真實反映内容變化时才有參考價值。
- 文件過大:單份文件建议不超過 5 萬條 URL、未压缩不超過 50MB,超出後需要拆分成多個文件,再用索引文件串起来。
一次可执行的自查流程
- 打開 sitemap 地址,確認能正常訪問,返回的是 XML,而不是 404 頁面或登入頁。
- 從列表里随机抽 20 到 30 條 URL 逐條訪問,看狀態碼是不是 200,内容是否還存在。
- 對比近期發布的文章,確認新頁面已经出現在文件里,並且 lastmod 與發布時間對得上。
- 检查 robots.txt 有没有声明 sitemap 地址,同时確認没有規則把 sitemap 自己拦住。
- 查看服務器日誌中爬虫對 sitemap 的訪問记錄,如果長期没有請求,說明地址可能没生效。
- 在搜尋资源平台重新提交,並在之後一段時間里观察抓取情况的變化。
让它跟着内容流程走
手工维護几百條還行,上千條就容易出错。更稳妥的做法是让程序在發布、修改、刪除内容时自動更新索引:新頁面寫入,下线的頁面移除。更新时只改動變化的部分,不要每次重建整個文件,否則爬虫每次抓到的都像是「全站刚刚更新」,反而失去了參考意义。
不要把 sitemap 当成收錄保證
sitemap 提供的只是线索,是否抓取、是否索引,仍由爬虫结合站点质量、结构和资源分配自行判断。
真正需要盯的是两件事:爬虫有没有来抓,抓到的頁面是否被正常索引。前者看抓取日誌,後者看平台里的索引狀態。sitemap 是這條鏈路上的入口之一,把它维護干净能减少「新頁面一直等不到蜘蛛」的概率,但不要指望它單獨解决所有問题。