站点地图(sitemap)的定位,是站点主動交给搜尋引擎的一份推荐清單:這些地址我認為值得抓。但很多站点的 sitemap 其實是程序按資料库全量導出的,于是 404 頁、跳轉地址、noindex 頁面、參數组合頁全被塞了進去。清單越長,越没人愿意認真看。花半小时自查一遍,比反复提交更有效。
一、先确定進 sitemap 的门槛
把 sitemap 当成“精選清單”而不是“全站备份”,進门條件大致有几條:
- 頁面返回 200,不是 301、302,也不是软 404;
- 頁面自身允许被索引,没有挂 noindex;
- 它是規范版本,canonical 指向自己而不是別的地址;
- 内容有實际價值,不是空壳列表頁、纯篩選结果頁或測試頁;
- 在站内有正常入口,不是只能靠 sitemap 才能被發現的孤岛頁面。
如果一條地址你並不希望用戶從搜尋结果点進来,那它大概率也不该出現在 sitemap 里。
二、lastmod 別当成生成時間
有些程序每次跑 sitemap 生成脚本,就把所有頁面的 lastmod 刷新成目前時間。短期看没什么問题,長期看這個字段會失去參考價值——蜘蛛發現全站天天“大改”却看不到内容變化,之後就不再參考它了。
更稳妥的做法是:只有正文、标题、價格、库存這類實质内容變動时才更新 lastmod,模板調整、样式改版不算。如果程序拿不到真實的修改時間,宁可不寫這個字段,也不要寫一個假的。
三、地址與格式上的细节
- 用绝對地址,带上协议和域名,不要只寫相對路径;
- 不要带會话 ID、跟踪參數、临时排序參數;
- XML 中的特殊字符要正确轉义,比如 & 要寫成 &;
- 單文件控制在 5 萬條、50MB 以内,超出就拆分;
- 整份文件统一 UTF-8 编碼,避免出現乱碼地址。
四、分片與索引文件
内容量大的站点,建议按栏目或按内容類型分片,比如文章、商品、专题各一個文件。再用一個 sitemap index 指向這些子文件。索引文件里只列子 sitemap 的地址,不要再混進具体頁面,否則层級會變得混乱,排查問题时也不好看。
五、和 robots.txt 對齐
在 robots.txt 里寫明 sitemap 的地址,方便被找到,這是常規做法。但要注意两邊別打架:robots.txt 里被 disallow 的目錄,就不要同时出現在 sitemap 里。規則互相矛盾时,蜘蛛只會更谨慎,可能连带着降低對整個清單的信任。
六、提交之後,去看日誌
生成了、提交了,並不代表事情結束。接下来要回到日誌里驗證:
- sitemap 文件本身有没有被請求,返回的是 200 還是 404、403;
- 清單里的頁面,實际被抓取的比例大概是多少;
- 哪些頁面長期没有被訪問,是层級太深、入口太少,還是内容本身没吸引力;
- 把每次調整前後的資料记下来,方便判断改動是否有用。
這些观察不需要天天做,按内容上线节奏、每月或每次大批量改版後跑一次就够。
七、別指望它解决所有問题
sitemap 只是發現通道的补充。頁面能不能被收錄、被怎样收錄,最终還是取决于内容质量、站内结构、服務器稳定性這些基础項。把它当成“提交就收錄”的工具,往往會失望。
比較務實的做法是:把 sitemap 检查放進常規维護清單,内容批量上线、栏目調整、大批量下架之後各跑一遍,確認清單里剩下的都是還活着、還该被看到的正式頁面。