站点地图(sitemap)看起来只是一份 XML 文件,實际是對外發出的一份地址承诺:清單里的每個地址,都應该是你希望被索引、並且确實能正常打開的頁面。文件生成一次就放着不管,蜘蛛按图索骥却频频撞上跳轉和错誤頁,這份承诺就變成了负担。
sitemap 的定位:可索引地址清單
很多人把 sitemap 当成“全站地址备份”,于是把所有能想到的 URL 都塞進去。更合理的定位是:只放那些你希望被收錄、且目前返回正常狀態的規范地址。不在這份清單里的頁面依然可以被抓取和索引,sitemap 只是提高發現效率,不是收錄開關。
三類最常见的問题
一、混進了不该出現的地址
- 已经被 301 跳轉的舊地址,清單里還留着老路径;
- 設定了 noindex 的頁面,sitemap 和 meta 指令互相矛盾;
- 篩選參數頁、排序參數頁、會话追踪參數頁被批量寫入;
- 已经下线返回 404 或 410 的内容,仍停留在清單中;
- 登入頁、後台頁、測試环境域名等不该公開抓取的地址;
- 分頁列表的第二頁之後,是否收錄需要單獨判断,不宜預設全放。
這些地址看不出問题,直到你拿日誌去看蜘蛛實际訪問了什么,才發現大量請求落在無效路径上。
二、lastmod 失去參考價值
有些站点每次生成 sitemap 时,把全部地址的 lastmod 刷成同一個時間戳;有些則長期不更新,頁面改了好几轮,時間還停在最初。两種情况都會让這個字段失去意义。更稳妥的做法是:只有当頁面正文或主要内容确實發生實质變化时,才更新该地址的 lastmod,模板調整、广告位替換這類改動不必触發。
三、分片與索引文件無人维護
当站点規模變大,通常會按栏目或時間拆成多個子 sitemap,再用一個索引文件(sitemap index)把它們串起来。單個 sitemap 文件不宜超過 5 萬條地址、未压缩大小不宜超過 50MB。常见故障是:新增了子文件却忘了加進索引,或者某個子文件报错、返回 404,導致整批地址静默失效。
一套可以照着做的维護流程
- 導出並抽样校驗。把 sitemap 中的地址拉成列表,脚本批量請求,记錄狀態碼、跳轉鏈和目标地址、頁面上的 canonical 與 robots 指令。
- 過滤出四類異常。狀態碼非 200 的、跳轉到其他地址的、canonical 指向別處的、带 noindex 的——這些都應该從清單里移除或替換。
- 剔除參數與低價值地址。把带追踪參數、排序參數、重复内容特征的地址清理掉。
- 校正 lastmod。用内容系統的實际更新時間生成,而不是用生成脚本的執行時間。
- 检查索引文件。確認每個子文件都能訪問、都已登记、條數在限制之内。
- 在 robots.txt 中声明位置。確認声明的路径可訪問、没有被人為拦截。
- 重新提交並观察日誌。提交後過一段時間再看服務器日誌,確認蜘蛛訪問的地址分布是否更集中在你希望的位置。
這套流程不需要天天跑。規模不大的站点,每月一次即可;内容更新频繁的站点,可以每周抽一次,重点看新增和下线两部分。
和其它信号保持一致
sitemap 不是孤立文件。它應该和 robots.txt 的抓取規則、頁面上的 canonical 标簽、内鏈结构指向的方向保持一致。如果内鏈都指向 A 地址,canonical 也寫 A,sitemap 里却登记的是 B,蜘蛛收到的就是三份互相矛盾的信号。
清單整洁不等于一定被收錄,收錄與否取决于搜尋引擎自己的判断。你能做的是把门口的路修平,別让蜘蛛在無效地址上反复折返。
把 sitemap 当成一項需要定期检查的运营事項,而不是一次性的技術配置,它才能真正發挥“指路”的作用。