URL 里带中文、空格或特殊符号,在实际站点中很常见:为了带上关键词而使用中文路径,或者把表格、聊天记录里的链接直接复制到后台。多数情况下搜索引擎能够处理这类地址,真正麻烦的是同一个页面在不同位置被写成不一样的字符形式,抓取和索引判断因此分散。这里只讨论字符本身带来的问题,不涉及 URL 长度和参数数量的取舍。
搜索引擎通常怎么处理这些字符
浏览器和爬虫在发出请求前,一般会把非 ASCII 字符和部分保留字符转成百分号编码:先按 UTF-8 拆成字节,再用 % 加十六进制表示。所以「中文」在请求行里通常看不到原字符,而是类似 %E4%B8%AD%E6%96%87 的形式。
关键在于,编码后的十六进制字母大小写都可以:%E4 和 %e4 指向同一个字节,但写在链接里是两个不同字符串。对爬虫来说它们是两个 URL,可能各抓一次,也可能各自进入索引判断。
容易出问题的四种情况
一、同一地址出现大小写不同的编码
程序生成的链接常用小写,人工复制或某些编辑器可能改成大写,站内就同时存在两个版本。在抓取日志里表现为同一路径被反复请求,在索引层面则表现为两个 URL 竞争同一份内容。
二、特殊符号没有转义,把参数切开
URL 中允许直接出现的字符有限。&、?、#、+ 在查询串里有特定含义:# 之后的内容不会发送给服务器,& 用来分隔参数,+ 在部分解析场景下被当作空格。如果文章标题、标签里带有这些符号又直接拼进 URL,原本一个参数会被切成两个,页面拿到的参数不完整,输出的内容也随之改变。
三、空格、全角标点与不可见字符
从文档、聊天工具或表格里复制链接时,首尾容易带上空格、换行、全角括号或全角逗号。肉眼几乎看不出来,但请求路径会多出一段编码,服务器可能返回 404,或者落到一个参数为空的页面上。
四、站内各处写法不统一
导航、面包屑、正文内链、Sitemap、分享按钮各自生成 URL 的方式不同,就会出现同一个页面在站内被指向三种写法的情况。这本身不是字符的错,但会把上面几个问题放大,也让后续排查更难定位。
先按这个顺序排查
- 从抓取日志里筛出对应同一内容的多条请求路径,看差异是编码大小写、多余的转义字符,还是参数被截断。
- 再看这些路径是谁引用进来的:内链、Sitemap,还是被站外复制传播。找到引用源,问题通常就解决了一半。
- 对比页面的 canonical、Sitemap 与实际内链写法是否一致。三者不一致时,先统一成一种,再观察后续抓取是否收敛。
- 确认服务器对每种写法都能正确返回内容,而不是 404、错误跳转或返回空页面。
统一写法的几条做法
- 新页面尽量使用可读的英文短路径,把中文标题留在 title 和 H1 里,减少编码环节。
- 必须使用非 ASCII 字符时,全站统一编码大小写,并且由程序生成,不靠人工复制。
- 链接里的参数值一律做 URL 编码,尤其是含 &、#、空格的值。
- 复制链接后检查首尾,去掉空格、换行和看不见的控制字符。
- Sitemap 中的 URL 与站内实际指向保持一致,避免同一页面长期存在两个版本。
URL 的字符问题并不复杂,麻烦的是同一份内容被写成多种形式。先让一个页面在站内只有一个写法,抓取和收录的判断才有稳定的依据。