站点运营

站点地图的维护与自查:提交之后才是开始

很多站点上线时在 robots.txt 里写一行 Sitemap 就再没管过,半年后文件里还留着已下线的栏目和过期的 lastmod。本文讲站点地图真正的作用、分片与索引文件的处理、lastmod 怎么才算真实、哪些地址不该放进去,以及提交之后该盯哪几个指标和一份可执行的自查清单。

站点运营

站点地图的维护与自查:提交之后才是开始

很多站点上线时会在 robots.txt 里写一行 Sitemap 地址,然后这件事就再也没有被提起过。半年后回头看,那个 XML 文件里还留着已经下线的栏目、改过路径的旧地址,以及一堆 lastmod 停在上线当天的记录。蜘蛛照样会来,但它拿到的是一份过期的地图。

站点地图解决的是什么问题

站点地图不保证收录,也不提升排名,它的作用只有一件事:告诉抓取端这里有哪些地址、以及大概什么时候更新过。对于链接层级深、内链稀疏,或者新页面一时半会儿进不了导航的站点,它是一个比较可靠的补充渠道。如果站点本身结构扁平、内链完整、蜘蛛每天都来,那站点地图的重要性会下降,但维护成本也很低,没有理由放着不管。

分片与索引文件

单个 sitemap 文件有地址数量和体积的上限,一般按 5 万条 URL、未压缩 50MB 来规划。超过之后不是能不能提交的问题,而是抓取端可能读不完或者干脆放弃。常规做法是按栏目、按内容类型或者按时间切分,比如文章、商品、专题各一个文件,再用一个 sitemap 索引文件把它们列出来。索引文件本身不要再嵌套索引,层级越浅越好。

  • 按栏目切分最直观,出问题时也方便单独排查
  • 如果某个栏目更新极快,可以再按月份切片,避免整份文件频繁变动
  • 索引文件和子文件的地址保持同域名,不要跨域引用

lastmod 要真实

lastmod 是最容易被滥用的字段。有人每次生成 sitemap 就把所有页面的时间刷成当前时间,结果是每天都告诉抓取端全站都更新了,久而久之这个字段就失去了参考价值。更稳妥的做法是让它来自内容本身的实际修改时间,模板调整、样式改版这类不影响正文的改动不要动它。

如果一份 sitemap 里所有页面的 lastmod 都是同一天,那它提供的更新信号基本等于零。

不该放进去的地址

站点地图是推荐抓取的清单,不是全站地址备份。下面这些放进去只会浪费抓取机会:

  • 已经返回 404 或 410 的页面
  • 会 301 跳转的旧地址,直接放跳转后的目标地址就行
  • 设置了 noindex 的页面
  • 带筛选参数、排序参数产生的重复地址
  • 需要登录才能看到内容的页面
  • 站内搜索结果页和临时生成的列表页

前几类属于互相矛盾:一边告诉抓取端别索引,一边又把它列进推荐清单,只会让判断变复杂。

生成方式

静态站可以靠构建脚本生成;内容管理系统一般有现成插件,但插件默认配置往往把草稿、附件、标签全塞进来,需要手动调整范围。手工维护一份纯静态 XML,在几百个页面以内还能接受,再往上就容易和真实内容脱节。无论哪种方式,关键是把生成这一步接到内容发布流程里,让新页面出现时自动进文件、页面下线时自动移除,而不是靠人定期补。

提交之后的监控

把地址写进 robots.txt 只是起点。之后要看的指标其实很少:文件是否能正常访问、返回状态是不是 200、里面的地址是否还是 200、数量有没有异常突增或骤减。数量骤减通常是生成脚本出错,骤增往往是参数地址漏了进来。这些异常在服务器日志和抓取统计里都能看到,不需要额外的工具。

一个可执行的自查清单

  1. 直接访问 sitemap 地址,确认返回 200 且内容是 XML
  2. 抽查十个里面的地址,确认都是 200 且能正常打开
  3. 确认文件里没有 404、301、noindex 的地址
  4. 确认 lastmod 与页面实际更新时间一致
  5. 确认索引文件能列出全部子文件,且子文件都能访问
  6. 确认 robots.txt 里的 Sitemap 地址拼写正确、没有多余斜杠
  7. 在内容发布流程里找到新页面如何进入 sitemap 这一步,确认它是自动的

这件事本身不复杂,难点在于它容易被忘掉。把它和栏目调整、内容下线放在同一个检查流程里,比单独记一个待办要可靠得多。