搜索抓取

同一个页面被写成三个 URL:大小写、斜杠与编码怎样影响蜘蛛抓取

蜘蛛在页面上拿到的是一串链接字符串,而不是已经确认的页面。大小写、结尾斜杠、URL 编码、参数顺序这些写法差异,会让同一份内容被拆成多个地址,既浪费抓取请求,也分散页面信号。本文梳理常见写法坑、蜘蛛不会去请求的链接形式,以及把地址收口到唯一版本的实操步骤。

搜索抓取

同一个页面被写成三个 URL:大小写、斜杠与编码怎样影响蜘蛛抓取

蜘蛛在页面上看到链接时,拿到的是一串字符,而不是一个已经确认过的页面。它只能照着这串字符去发请求。所以链接写法的差异,会直接变成抓取行为的差异:同一份内容可能被请求三次四次,也可能因为写法不对而压根没人请求。

蜘蛛眼里的 URL 只是字符串

在浏览器里,很多写法差异会被自动抹平:大小写会自动纠正,多余斜杠会被忽略。但蜘蛛不会替你猜,它抓的是字符串本身。下面这几类差异最常见。

主机名与路径的大小写

按规范,域名不区分大小写,路径区分大小写。但不少服务器是大小写不敏感的,于是 /About 和 /about 都能返回 200。蜘蛛看到两个不同字符串、两个都是正常页面,就会分别抓取、分别入库。同一份内容被记成两条记录,内链权重也被拆开。

结尾斜杠

/page 和 /page/ 也是两个字符串。如果服务器对两者都返回 200 而不做重定向,蜘蛛就会把它们当成两个地址。这类问题在栏目页、标签页上尤其多,因为不同编辑、不同模板输出的写法可能不一致。

中文、空格与百分号编码

同样一个标签页,可能被写成原始中文,也可能被写成百分号编码形式,还可能把空格写成加号。对蜘蛛来说这是三个字符串。搜索引擎通常会做一定程度的编码归一,但归一不是保证,尤其是编码层级不同、字符被二次编码时。

参数顺序与无用参数

?a=1&b=2 和 ?b=2&a=1 指向的内容完全一样,字符串却不一样。再加上排序参数、来源追踪参数、分页参数的不同排列组合,一个列表页可以轻易膨胀出几十个地址。

相对路径与多余的路径符号

相对路径、以双斜杠开头的写法、路径里插入的点号,蜘蛛都会尝试解析。解析结果有时和你以为的地址并不一致,特别是页面本身层级较深、或者被放在不同目录下渲染时。

哪些写法蜘蛛基本不会去请求

除了重复,还有一类问题更直接:链接根本没被当成链接。

  • 用脚本事件挂上去的假链接,没有可用的地址属性。
  • 只写了井号或空值的锚点,指向当前页面自身。
  • 邮件、电话协议开头的地址,不属于网页抓取范围。
  • 表单提交、按钮点击后才生成的跳转,不产生可抓取的链接。
  • 纯文本粘贴的地址,没有可点击标记,被识别的概率不稳定。

这些写法在用户视角能点、能跳,但在抓取视角里,路径就断在这里。

把每个页面收口到一个地址

与其事后分析重复抓取,不如在输出环节就统一。可以按这个顺序处理:

  1. 为每类内容确定唯一标准写法,包括大小写、是否带结尾斜杠、编码方式。
  2. 在服务器层面对变体做永久重定向,重定向比注释类声明更硬。
  3. 统一内链输出,让模板、面包屑、相关推荐都走同一套地址规则。
  4. 用规范化声明做兜底,处理那些无法重定向的变体,比如带追踪参数的地址。
  5. Sitemap 里只放标准版本,不要把变体也列进去。

顺序很重要:先重定向、再统一内链,最后才是声明。把所有希望都压在一行声明上,效果通常不理想。

上线前后可以做的几项检查

  • 翻抓取日志,按路径统计大小写变体、斜杠变体各被请求了多少次。
  • 抽查栏目页和标签页,看同一目标是否混用了两种写法。
  • 把内链里出现的地址与 Sitemap 对照一遍,看有没有对不上的。
  • 检查参数拼接逻辑,固定参数顺序,去掉无意义的空参数。
  • 看服务器是否对变体返回了重定向,还是直接给了 200。
抓取资源不是省出来的,是别浪费出来的。同一份内容被写成多个地址,是最容易被忽视的一种浪费。

链接写法看起来是前端细节,落到抓取上却是很实在的路径问题。把地址收口这件事做干净,蜘蛛拿到的路径更短、更明确,站点也少了一堆重复的抓取记录。