常见问题

蜘蛛池入口页里的目标 URL 带一长串参数,搜索蜘蛛会照原样抓吗?

入口页里的目标 URL 常常带参数,搜索蜘蛛会把不同参数当成不同地址处理,容易分散抓取、抓错地址。本文说明哪些参数最容易出问题、链接该怎么写更稳,以及 HTML 里 & 转义、URL 编码这些容易忽略的细节。

常见问题

蜘蛛池入口页里的目标 URL 带一长串参数,搜索蜘蛛会照原样抓吗?

入口页里挂的链接,很少是干净的一级路径,更多是带参数的动态地址,比如 detail?id=123、list?page=2&sort=new,后面再拖一段统计参数的跳转地址。这些地址能不能被搜索蜘蛛正常发现、它又会按哪一种形式去抓,直接决定入口页这次有没有真正起到作用。

搜索蜘蛛会抓带参数的 URL 吗

通常会。搜索蜘蛛把 URL 当成字符串来看,参数不同,多数情况下就当成不同地址,除非页面里通过 canonical 等手段明确告诉它这些地址指向同一内容。这意味着同一个目标页,可能因为链接写法不同,在蜘蛛那里被拆成好几个候选地址,各抓一次、各占一份抓取配额。

被抓取也不等于会被好好处理。参数越多、组合越乱,蜘蛛越难判断哪个是主地址,抓取请求也更容易被花在重复页面或者没什么价值的参数组合上。

哪几类参数最容易出问题

  • 会话类参数:sessionid、sid、phpsessid 这类每次访问都可能变的参数,会让同一个页面生成出无数个 URL,蜘蛛每次爬到的地址都不一样,很难把它们归到同一个内容上。
  • 跟踪类参数:utm_source、from、spm 之类的统计参数对内容没有任何影响,却把 URL 拉长、把地址数量翻倍。
  • 排序和筛选参数:sort、order、filter 组合起来的排列数量是爆炸性的,很容易把抓取请求引到大量高度相似的页面上。
  • 空参数和默认参数:?a=&b=&c= 这种,既不加内容也不减内容,只是让地址变长,增加判断成本。

入口页链接怎么写更稳妥

  1. 能静态化就静态化。伪静态地址通常比一串参数更容易被稳定识别,也方便你在日志里对上号。
  2. 必须带参数时,固定参数顺序,把统计参数和会话参数去掉,只保留真正决定内容的那一两个。
  3. 参数不要无限组合。分类页、筛选页这类如果会产生成千上万个地址,入口页里只挂最核心的几个,别把组合结果全铺出来。
  4. 链接直接指向最终可访问的地址。先跳到中间页再跳一次,多了一层中转,蜘蛛未必会一路跟到底。
  5. 同一个目标 URL 在入口页里尽量保持同一种写法,不要一会儿带参数、一会儿不带,让蜘蛛把它当成两个地址。

容易被忽略的 & 转义

href 里带多个参数时一定会用到 &。在 HTML 源码里它应该写成 &,如果直接写成一个裸的 &,浏览器多数时候能容错,但经过某些程序拼接、模板输出或二次加工后,地址容易被截断或错位,蜘蛛拿到的可能是一个不完整的 URL,最后抓成 404,或者落到另一个参数组合上,白白浪费一次抓取。

带中文或特殊字符的参数值,记得做 URL 编码。编码不统一,同一个参数在不同链接里出现两种写法,同样会被当成两个地址。

上线后的自查清单

  • 把入口页源码里的链接抽出来,看看有多少是同一路径配不同参数,参数是不是都有必要保留。
  • 对照服务器日志,确认蜘蛛实际抓取的是不是你希望它抓的那个地址,而不是某个统计参数变体。
  • 检查入口页里同一目标 URL 的写法是否一致,有没有混用带参数和不带参数的版本。
  • 确认参数值是正确编码的,& 在源码里是 & 而不是裸写。
入口页解决的是“让蜘蛛发现地址”,参数乱不乱则决定“它发现的是哪一个地址”。地址越干净、越一致,后面的抓取和判断才越不容易跑偏。