做蜘蛛池入口页时,很多人把精力放在内容和链接上,却容易忽略一个基础问题:同一个页面,蜘蛛可能看到好几个不同的 URL。入口页一多,参数一乱,抓取预算就被分散到重复地址上,真正想让它读的那一版反而可能被忽略。
蜘蛛怎么判断两个 URL 是不是同一页
搜索引擎对 URL 的去重,主要看路径、查询参数、主机名和协议。对入口页来说,最常见的问题出在查询参数上。比如同一个页面,链接里分别写成:
- /entry/123
- /entry/123?from=abc
- /entry/123?from=abc&utm_source=xxx
- /entry/123?utm_source=xxx&from=abc
在蜘蛛眼里,这些地址可能被当作不同 URL 分别抓取。参数顺序不同、多一个跟踪参数、少一个默认值,都会造成新的地址。路径部分也有类似情况:大小写不一致、末尾斜杠不一致、index 页写不写,都可能裂成两个版本。
入口页里常见的参数坑
跟踪与来源参数
统计代码、外链来源、广告投放经常会在链接后追加 utm_source、utm_medium、from、ref、spm 等参数。入口页如果直接从这些渠道复制链接,蜘蛛就会顺着带参数的地址抓。更麻烦的是,同一个页面可能被不同渠道写出不同参数组合。
分页、排序与筛选参数
列表型入口页常用 page、p、start、sort、order、filter 这类参数。分页参数如果默认值和空值都能访问,就会出现 /list、/list?page=1、/list?p=1 三个地址。筛选和排序参数如果组合过多,蜘蛛会陷入大量低价值 URL。
会话与临时参数
有些程序会在 URL 里带 PHPSESSID、sid、token 等会话参数。这类参数对蜘蛛没有意义,却会让每个访问都变成“新地址”。入口页链接输出时,应尽量不把这类参数写进 href。
入口页 URL 设计的几条建议
- 路径能静态化就静态化,参数越少越好。入口页的主要任务是让蜘蛛发现链接,不是让用户筛选数据。
- 必须保留的参数只留一个,值也要可控。比如分类页只用 /category/seo,而不是 /category?type=seo&sort=new。
- 统一小写,统一末尾斜杠。全站链接输出保持同一规则,别一会儿带斜杠一会儿不带。
- 分页尽量用路径形式,比如 /list/page/2,比 ?p=2 更直观,也不容易和默认页混淆。
- 入口页输出的链接用规范化后的绝对地址,不要这边写相对路径、那边写带参数的完整路径。
- 如果已经用了 canonical,确保它指向的规范地址和站内大多数链接一致,不要指向另一个带参数的版本。
已经出现多地址时怎么收
如果日志里发现同一个入口页被多个参数版本频繁抓取,可以先从链接输出查起。把模板、统计代码、广告位、外链里混用的地址统一成规范版本,通常能直接减少大部分重复抓取。对于已经产生并可能被蜘蛛记住的旧地址,用 301 跳转到规范地址是比较稳妥的做法,不要依赖 JS 跳转或 meta refresh,因为蜘蛛不一定会执行。
同时检查 sitemap 里提交的是哪个版本。如果 sitemap 提交的是带参数地址,而站内链接用的是静态路径,等于自己制造了两套入口。日志观察时,可以重点看同一路径下不同参数的抓取频次,频次高的那组通常就是链接输出最混乱的那组。
一个简单的检查清单
- 入口页链接里是否混入了 utm、from、ref 等跟踪参数?
- 分页、排序参数是否有默认值版本和空值版本同时可访问?
- 大小写和末尾斜杠是否全站统一?
- sitemap、站内链接、canonical 是否指向同一个规范地址?
- 日志里同一路径是否出现多个参数版本的大量抓取?
URL 规范化不是做一次就结束的事。模板改版、统计代码更新、渠道投放变化,都可能重新引入参数。把入口页地址当成需要定期抽查的运营项,比一次性设置更实际。