入口页上的目标链接怎么写,是蜘蛛池里最容易被忽略的一环。很多“蜘蛛来过入口页,却没抓目标 URL”的情况,根源并不在抓取配额或模板数量,而在链接字符串本身:相对路径解析到了别处、大小写不一致、特殊字符没编码、末尾斜杠不统一。搜索蜘蛛解析链接的规则和浏览器大体一致,真正出问题的是写法不统一——目标 URL 变成了另一个地址,或者同一个地址被拆成了好几个。
相对路径不是问题,解析基准才是关键
搜索蜘蛛会按 URL 标准规则,把 href 里的相对路径拼到入口页自身的地址上。所以 href=“target.html” 最终指向入口页所在目录下的文件,href=“/target.html” 指向根目录下的文件。只要入口页的目录结构稳定,相对路径完全可用。
容易踩坑的是两种情形:一是入口页里写了 base 标签,解析基准被整体改写,所有相对链接都拼到 base 指定的地址上;二是入口页 URL 本身带参数或被重写、被代理,蜘蛛看到的是重写后的地址,而你按原始目录结构写的相对路径就错位了。这两种情况下链接不会消失,但会指向一个不存在的地址并返回 404,目标 URL 自然不会被抓。
大小写与末尾斜杠:由服务器决定
URL 的路径部分在标准上是区分大小写的。在 Linux 配 Nginx、Apache 这类区分大小写的环境里,/Target.html 和 /target.html 是两个不同资源;而部分 Windows、IIS 环境不区分,两者都能打开。隐患在于:入口页混用了大小写,在区分大小写的服务器上会有一部分链接 404;在不区分的服务器上,同一个目标可能出现多种写法,被抓取时被当成多个 URL。
末尾斜杠同理。/list 和 /list/ 在有些配置下是同一资源,在另一些配置下一个是文件、一个是目录索引,甚至触发 301 跳转。如果入口页里两种写法都有,建议统一成一种,并让服务器把另一种 301 到标准形式。
特殊字符与 URL 编码:不一致会拆散同一个地址
中文、空格、加号、井号这些字符出现在 URL 里时,需要按规则编码。问题在于写法可能有多种:空格写成 %20 或加号,中文既可以直接写字符,也可以写成百分号编码。多数服务器会做归一化,两种写法落到同一个资源;但也有服务器不做归一化,于是同一个目标被当成两三个 URL 分别抓取,而抓到的那一份未必是你希望被收录的那一份。
容易被忽略的细节:HTML 里的 &
链接放在 HTML 属性里时,查询参数之间的分隔符号严格来说应该写成 &。写成裸符号时,如果后面紧跟的字母恰好构成 HTML 实体名(例如参数以 copy、reg、amp 之类开头),浏览器和解析器可能把它当实体处理,参数就被截断了。搜索蜘蛛同样按 HTML 规则解析,参数一错,抓到的就是另一个 URL,或者落到默认页面。
排查清单
- 抓下入口页 HTML,逐个把 href 解析成绝对地址,和日志里出现的 URL 对照。
- 检查页面是否存在 base 标签,或是否被重写、代理导致目录结构变化。
- 抽查目标 URL 的大小写,与服务器上的实际文件名是否一致。
- 统一末尾斜杠写法,并确认服务器对另一种写法是否做 301。
- 带中文或空格的 URL,确认实际访问地址与编码写法一致,不要中文和百分号编码混用。
- 检查参数分隔符号是否写成实体形式,尤其是参数名以字母开头、容易构成实体的。
实操建议
- 入口页里的目标链接尽量用完整绝对地址,含协议和域名,省掉解析基准带来的不确定性。
- 路径统一小写,末尾斜杠统一加上或统一去掉,并在服务器上把非标准写法 301 到标准形式。
- 特殊字符一律用百分号编码,避免中文与编码两种写法在同一个入口页里并存。
- 改完写法后,用日志观察目标 URL 的抓取是否集中到标准地址上,再判断是否需要继续调整。
相对路径、相对协议这些写法本身不是问题,搜索蜘蛛处理得和浏览器一样。影响发现效率的是解析基准不确定、大小写和斜杠不统一、编码方式混杂——它们会让一个目标 URL 变成好几个,也会让一部分链接直接落到 404。