不少站長把 sitemap 当成收錄開關:文件提交上去,就等着頁面一個個進索引。實际做下来會發現,sitemap 通常只解决一件事——把地址明确地告诉搜尋引擎。至于這個地址什么时候被抓、抓完要不要收,仍然由頁面本身决定。所以更實用的思路是:先把這份清單寫對,再谈提交之後怎么查。
先说清楚 sitemap 的邊界
它是一份 URL 清單,不是收錄指令。它负责让地址被看到,不负责让地址被收錄。
明白這一点,很多困惑就消失了。比如清單里的地址一直停在“已發現,尚未抓取”,那不是 sitemap 没交對,而是抓取排队和優先級的問题;頁面被抓了却没進索引,那要回到内容质量、重复度、規范地址上找原因,跟清單本身關系不大。
反過来,sitemap 也确實有用:站点层級深、内鏈稀少、新頁面没人鏈過去时,它能给搜尋引擎一條明确的入口。尤其是新站或大站的新栏目,光靠内鏈爬過去可能要等很久。
哪些 URL 适合放進 sitemap
- 返回 200、可以直接打開的正常頁面;
- 内容有獨立價值,且你希望它被搜到的地址;
- 已经收敛過的規范版本,不要同时放带參數、带大小寫變体的多個副本;
- 頁面自身没有 noindex,也没有被 robots.txt 挡住抓取。
反過来说,下面這些放進去基本是浪費位置,還可能让抓取判断變乱:跳轉地址、404 或已下线的頁面、登入後才可见的頁面、篩選和排序产生的临时地址、分頁里内容高度重复的那几頁、以及一批内容几乎一样的聚合頁。清單越干净,搜尋引擎對它的信任越稳定。
几個容易被忽略的寫法問题
lastmod 不要随手寫
lastmod 表示這個地址的内容最後一次實质性變化的時間。如果每次生成都把全部地址刷成目前時間,這個字段就會失去參考價值。只更新真正改過的頁面,或者在自動生成时按實际修改時間寫入,比统一刷新更有意义。改個错別字要不要動 lastmod?影响不大,但也不值得為它把整份清單刷一遍。
分片和條數要按規則来
單個 sitemap 文件有地址條數和体积上限,超過就要拆成多個文件,再用一個索引文件把它們列出来。很多工具會自動處理,但自建脚本时容易漏。另外,地址里的特殊字符要做轉义,非英文地址建议使用编碼後的形式,避免解析失敗。
清單里的地址要和頁面上的一致
协议、域名寫法、结尾斜杠要跟頁面里的規范地址保持统一。如果清單里寫的是 http 版本,頁面上却是 https,或者一邊带 www 一邊不带,就會多出一次跳轉,甚至让两個版本各被当成一個地址。寫清單之前,先把站内的規范形式定下来,然後全站照做。
提交之後的自查顺序
- 先確認文件能被正常訪問:直接在浏览器打開 sitemap 地址,看是否返回 200、内容是不是完整 XML。
- 再看格式有没有报错:XML 标簽未閉合、缺少命名空間、编碼声明不對,都會導致整份清單讀不出来。
- 然後抽查清單里的地址:随机挑几條,確認能打開、狀態碼正常、頁面可索引。
- 接着對照收錄資料:把清單里的地址和實际已收錄的地址做個比對,看看差距集中在哪一類頁面上,是全部還是某個栏目。
- 最後看服務器日誌:蜘蛛是否按清單来抓過、抓取的频率如何、有没有大量 404 或 5xx。日誌里的信息比後台資料更直接。
這几步走完,通常就能判断問题出在清單本身、頁面本身,還是抓取节奏上。
什么时候该重新生成
不必每次改内容都重做。比較合适的时机是:新增了一批頁面、舊頁面批量下线、栏目结构做了調整、或者發現清單里混進了大量無效地址。保持清單和线上真實可索引的地址一致,比追求天天更新更重要。
小结
sitemap 的價值在于减少發現成本,而不是替代内容质量。把清單里的地址筛干净、字段寫准确、定期和线上狀態核對一遍,剩下的就交给頁面的内容和内鏈结构去决定。清單只是一個入口,走進去之後的事,還得看頁面自己。