站点运营

站点运营:搜索蜘蛛的URL发现,从中文URL与编码转换谈起

很多站点把栏目和文章路径写成中文,浏览器里看没问题,但在复制、分享、日志分析和蜘蛛抓取时会出现多种编码形式。本文梳理编码不一致导致同一内容出现多个地址的常见情形,并给出统一规范、服务端归一化和排查的实用做法。

站点运营

站点运营:搜索蜘蛛的URL发现,从中文URL与编码转换谈起

不少站点为了可读性,直接把栏目和文章路径写成中文,例如 /帮助中心/发货说明。在浏览器地址栏里看着清楚,但一到复制、分享、日志分析和蜘蛛抓取环节,这条地址往往变成另一副样子。搜索蜘蛛看到的通常是被编码后的形式,如果站内链接、站点地图、跳转规则各写一套,URL 发现就容易出现偏差。

同一个页面的多种写法

中文地址常见的存在形式有几种:UTF-8 百分号编码、GBK 编码、原始中文字符,以及二次编码后的结果。这些字符串在服务器眼里未必等价,有些会被当成不同资源处理。百分号编码还有大小写差异,例如 %E4%B8%AD 与 %e4%b8%ad,多数环境解析结果相同,但作为 URL 字符串它们是两个值,容易衍生出重复地址。

实际运行中较常见的情形

  • 站内导航输出的是一种编码形式,站点地图里却是另一种。
  • 分享按钮或第三方统计工具把链接再次编码,出现 %25E4 这类前缀,点开后是 404 或异常页。
  • 服务器把中文路径改写成拼音或数字 ID,却没有做 301 跳转,新旧地址同时可访问。
  • 后台生成链接的模板与前端渲染模板不是同一套规则,同一篇文章被引用出多个地址。
  • CDN 或反向代理对编码不做归一,同一路径在不同节点表现不一致。

统一规范比事后修补更省事

如果站点刚起步,比较稳妥的做法是尽量使用 ASCII 路径,例如拼音、英文单词加数字 ID。中文标题放在页面里即可,不必进入 URL。若因为业务原因必须保留中文路径,那么全站需要约定一个规范形式,并让所有出口都遵守它。

  1. 确定字符集为 UTF-8,百分号编码统一使用大写字母。
  2. 服务端做归一化处理:把 %e4 与 %E4 视为同一路径,把二次编码解回原始值,再统一跳转到规范地址。
  3. 规范的跳转使用 301,避免同一条内容由多个地址返回 200。
  4. canonical 标签指向规范形式,且与站点地图、内链保持一致。
  5. 站点地图只提交规范地址,不要把编码混用的地址一起提交。
  6. robots.txt 中的规则按规范形式书写,否则可能看起来生效、实际没匹配上。

排查时看什么

抓取日志里筛选带百分号的请求,观察同一栏目或文章是否以多种编码反复出现;如果单位时间内同一内容的抓取频次明显偏高,通常说明地址没有收敛。也可以手动用命令行请求不同编码形式,比较返回状态码和 canonical 指向,看看是否存在本该跳转却返回 200 的情况。

另外要留意站内搜索、标签页和评论区的链接输出。这类位置往往由不同模块生成,最容易把编码规则打乱。对于确实不再使用的旧编码地址,保留跳转一段时间,比直接返回错误更稳妥。

小结

中文 URL 本身不是问题,问题是同一条内容被编码成多个地址。把编码形式收敛到一个规范值,并让内链、站点地图、跳转和 canonical 说同一句话,蜘蛛的 URL 发现路径自然会清晰一些。规范做的只是减少歧义,具体抓取和收录仍由搜索引擎决定。