站点地图(sitemap)不是新鲜東西,但它的實际维護狀態往往比想象中糟糕。很多站点上线时配了一份,之後就再没人動過:新栏目没加進去,下线的頁面還留在里面,lastmod 時間永遠停在某個遥遠的日期。结果就是,站点地图從「给蜘蛛指路的地图」退化成一份過期的通讯錄。
需要先说清楚一件事:提交站点地图不等于内容會被收錄,也不代表排名會變好。它解决的是「URL 被發現」這個前置問题——让搜尋引擎知道這些地址存在、大概多久更新一次。至于抓不抓、收不收,仍取决于内容质量和其他信号。
第一步:確認地址本身是能打開的
听起来像废话,但這是最高频的問题。常见故障包括:文件路径寫错返回 404、被 CDN 或防火墙拦截返回 403、服務器返回 HTML 错誤頁而不是 XML、gzip 压缩後 Content-Type 不對。用一個不带登入態的請求去抓一次,看狀態碼和响應头,比在後台点「提交成功」有用得多。
- 狀態碼是否為 200,而不是 301 鏈到別處或 403、404
- Content-Type 是否為 XML(application/xml 或 text/xml)
- 响應体開头是否是 <?xml,不是登入頁或驗證頁
- 大小是否超過 50MB,條數是否超過 5 萬條
第二步:检查里面的 URL 该不该出現
站点地图的准确性比數量重要。下面這些地址塞進去,轻則浪費抓取预算,重則造成信号矛盾:
- 被 robots.txt 屏蔽的路径:一邊说不许抓,一邊又提交,属于自相矛盾
- 带 noindex 的頁面:提交一個明确声明「不要收錄」的地址,没有意义
- 301/302 跳轉地址:應直接寫最终地址,而不是跳轉前那個
- 篩選、排序、分頁參數组合:這類 URL 容易無限膨胀,通常只保留主列表頁更划算
- 測試环境、後台、搜尋结果頁:這些地址不该對外出現
- 已下线但狀態碼是 200 的占位頁:刪除的頁面要么 410/404,要么從地图里移除
一個實用的做法是:把站点地图里的 URL 列表與服務器訪問日誌做對照。日誌里長期没有任何抓取记錄的地址,值得單獨看一眼,通常說明它們要么冗余,要么结构上有問题。
第三步:lastmod 別造假
lastmod 是给蜘蛛判断「值不值得再来一趟」用的。如果每次生成站点地图都無脑刷成目前時間,那這個字段很快就會被忽略;反過来,如果内容明明改過却從不更新,蜘蛛也會低估更新频率。
合理的做法是让它跟着内容真實變更走:正文、标题、结构化信息有實质修改时更新;只是換了模板、調了广告位、修了错別字,可以不動。對于列表頁、聚合頁,如果每次請求内容都會變(比如按時間排序的首頁),要么给一個诚實的更新時間,要么干脆不放這類地址。
判断标准很简單:如果某個頁面的 lastmod 每天都在變,但用戶看不到任何新内容,那這個字段就是在消耗信任。
第四步:大站要拆索引文件
内容量上来之後,單文件站点地图會撑不住。标准做法是拆成多個子地图,再用一個索引文件(sitemap index)串起来:
- 按類型拆分:文章、产品、栏目、图片、视频各一份
- 按時間或數量滚動:比如每份最多 1 萬條,超出就新建下一份
- 索引文件只列子地图地址和各自的 lastmod,不再重复列具体頁面
- 子地图的路径保持稳定,避免每次生成都換名字導致舊地址 404
如果站点有多個語言或地区版本,多語言站点地图配合 hreflang 标注能省不少事,但前提是語言版本之間的關系本身是清晰、稳定的。
第五步:在 robots.txt 里声明,並定期复核
把站点地图地址寫進 robots.txt 是成本最低的声明方式,注意寫完整的绝對地址:
- 一行一條,格式為 Sitemap: https://example.com/sitemap.xml
- 索引文件與子地图都可以列,但列索引文件更清爽
- 改過域名或目錄结构後,记得同步更新,舊地址會 404
此外,图片、视频、新闻類内容如果想用专门的站点地图,要確認對應内容确實存在且可訪問,不要為了「多提交一点」而填一堆空壳地址。
把它變成例行工作
站点地图的價值在于「持續准确」。建议固定在内容發布流程里加两步:新頁面上线後是否進入地图;頁面下线或改地址後是否同步移除。每季度做一次完整复核,重点看狀態碼、noindex、重定向三類問题,基本就能守住這份地图的可用性。