很多收录问题不是内容问题,而是地址本身有多个写法。同一个页面,浏览器能打开、蜘蛛也能打开,但蜘蛛看到的 URL 和你以为的那个可能不是同一个。中文、空格、特殊符号、编码方式,任何一个环节不统一,都会让一个页面在抓取和索引里变成好几个候选。
蜘蛛拿到的 URL,和你复制到表格里的可能不一样
地址栏里显示为中文的部分,在实际请求中通常是百分号编码。比如路径里的「蜘蛛」,在 UTF-8 下会被写成 %E8%9C%98%E8%9B%9B。空格也比较麻烦:有的地方编码成 %20,有的地方写成加号,还有的浏览器直接留一个空格,服务器收到的是三种不同的请求。
服务器对大小写的态度也不一样。Linux 环境下,/Page-A 和 /page-a 是两个不同的资源;如果站点又做了自动解码或重写,实际生效的写法可能更多。
常见的「一页多址」来源
- 中文路径有的用原文,有的用编码,两种写法都被内链引用过;
- 空格出现 %20、加号、原始空格三种形态;
- 参数顺序不同,或夹带了跟踪、排序、会话相关的参数;
- 结尾带不带斜杠混用;
- 大小写不统一,尤其是自动生成或人工手写的内链;
- URL 里下划线和连字符混用;
- 中文域名同时存在 Unicode 与 punycode 两种形式。
这些地址往往都能返回正常页面,蜘蛛不会自动帮你合并,它更像是按遇到的每一个地址分别抓取、分别判断。结果是抓取量被拆散,索引里可能留下多条相似记录。
把写法收口到一处
比较稳妥的做法是先定一个规范写法,再让所有出口都指向它:内链、站点地图、canonical、分享按钮、对外投放的链接,都用同一套编码规则。中文路径如果没必要保留,换成拼音或英文词组,后续维护会省很多事。
- 统一使用百分号编码形式出现在页面上,不要一半原文一半编码;
- 在服务器层面对非规范写法做 301 跳转,而不是只靠 canonical 兜底;
- 确认服务器、CDN、应用框架是否会对 URL 做二次解码或重写;
- 检查站点地图里的地址与页面 canonical 是否逐字一致。
哪些符号最好别出现在 URL 里
井号(#)之后的内容不会发送给服务器,它只对浏览器有意义,所以不要把关键内容放在片段里指望蜘蛛读到。与号、等号、百分号这些符号本身有语义,堆叠过多既难读,也容易出现解析差异。跟踪参数、会话 ID、筛选排序参数尽量只用于页面交互,不要写进内链和站点地图。
一个页面只留一个规范地址,其余写法都用跳转收口,比事后在索引里清理要轻松得多。
自查时可以看这几个地方
- 在服务器日志里检索带 % 的请求,统计哪些编码地址被蜘蛛访问过,再和真实页面列表对照;
- 用索引状态工具或站内检索,确认同一内容是否对应多个 URL;
- 抽查首页、栏目页、内容页的内链,看编码写法是否统一;
- 检查站点地图与 canonical 的写法是否完全一致,包括大小写与结尾斜杠;
- 如果使用中文域名,确认对外引用的是同一种形式。
URL 规范不是一次性的工作,站点改版、栏目调整、运营添加链接时都可能重新引入新的写法。把它当成常规检查项,比等收录对不上再回头排查要省力。