Sitemap 的定位:清單,不是通道
很多运营把 Sitemap 当成“提交了就收錄”的按钮,實际不是。它更像一份交给蜘蛛的地址清單,作用是补充内鏈可能漏掉的 URL,而不是替代抓取路径。站点的主發現路径仍然是内鏈:蜘蛛沿着連結一层层走,判断哪些頁面值得繼續走。Sitemap 的價值在于把那些点击深度過深、内鏈稀少甚至暂时没有入口的頁面,直接摆到蜘蛛面前。
理解這一点之後,分片和索引文件的设計思路就清楚了:它要解决的是“清單太大、一次给不完”的工程問题,而不是“怎么让排名變好”。
一個文件装不下时,用索引文件拆開
單個 Sitemap 文件有明确的容量上限:一般不超過 50000 條 URL,未压缩体积不超過 50MB。超過之後,多出来的部分不會被讀取或容易被截断,等于白寫。這时候需要用索引文件(sitemap index)把多個分片串起来。
索引文件的结构很简單:外层是 sitemapindex,里面每一條 sitemap 记錄给出一個分片文件的绝對地址,可選带上该分片自己的 lastmod。蜘蛛讀到索引文件,再逐個去取分片,整個流程和普通抓取一样占用抓取预算,所以分片不是越多越好。
分片怎么切更省事
- 按栏目或目錄切:和站内结构對齐,某個栏目增删时只動對應分片,维護成本最低。
- 按内容類型切:文章、商品、活動頁各一個分片,便于分別判断哪些類型值得提交。
- 按時間切:更新频繁的站点可以按周或按月切片,最新的單獨一個文件,方便蜘蛛優先取。
不建议按字母表或随机數量机械切分。分片文件的地址應当稳定,频繁改名會让蜘蛛反复废弃舊地址、重新發現新地址,白白消耗抓取次數。
分片里放什么,不放什么
清單的质量比數量重要。往分片里塞進一堆無效地址,只會稀释這個清單的可信度。
- 放:返回 200、允许索引、且是規范版本(canonical 指向自身)的頁面地址。
- 不放:301/302 跳轉地址、404 與软 404 地址、被 robots.txt 屏蔽或带 noindex 的頁面。
- 慎放:带大量參數的篩選頁、分頁翻到很深的頁碼、站内搜尋结果頁。這類頁面通常是重复内容或低價值頁面,放進去反而占用抓取预算。
分頁的處理上有個折中做法:只放第一頁,後續頁碼靠内鏈的“下一頁”自然串联。這样清單更干净,蜘蛛也能顺着連結走。
lastmod、changefreq、priority 的現實
這三個字段里,只有 lastmod 還有實际參考價值,前提是它真實。如果每次生成 Sitemap 都把 lastmod 刷成目前時間,蜘蛛很快會学會忽略它;如果 lastmod 准确反映内容實际修改時間,回訪时就有机會跳過没變的頁面。
changefreq 和 priority 早已被主流搜尋引擎確認不作為排序或抓取依據,寫或不寫影响不大。與其在 priority 上纠结,不如把资源放在修正 lastmod 上。
让蜘蛛真正讀到這份清單
- 在 robots.txt 里用 Sitemap 指令声明索引文件的绝對地址,這是最省事的發現方式。
- 在站点後台的站長工具里提交索引文件,便于後續查看抓取與處理情况。
- 索引文件本身要能被正常訪問,別放在需要登入或返回 403 的目錄下。
- 分片文件如果做了 gzip 压缩,確認压缩包完整、编碼無 BOM 头,否則解析會失敗。
更新與监控的几個细节
分片更新的频率不必和内容發布频率一致。内容站可以每天或每周重建受影响的分片,低频更新的站点按需重建即可。索引文件的 lastmod 可以跟着分片變更同步。
监控时重点看两件事:一是各分片是否都處于可正常訪問狀態,二是站長工具里“已提交”和“已编入索引”的數量差距。這個差距本身是正常的,它反映的是篩選结果,不是失敗率,不要拿它当收錄率来考核。
一份干净、真實、分批维護的 URL 清單,比一份塞满全站地址的巨型文件更有用。
小结
Sitemap 解决的是“让蜘蛛知道有這些地址”,不解决“蜘蛛愿不愿意抓、要不要收錄”。分片與索引文件把清單規模問题拆開處理,真正的抓取路径依然要靠内鏈结构搭好。清單给得干净,路径铺得通畅,两者配合才有意义。