做蜘蛛池入口页时,多数人会把目标 URL 写成 a 标签的 href。但实际改模板时经常出现另一种情况:入口页是从别的主题改的,链接被塞进了图片地址、iframe、CSS 背景图,甚至是 JS 拼接出来的字符串里。这时候就会有一个疑问:搜索蜘蛛还能不能把这些 URL 当成链接去发现。答案不能一概而论,取决于 URL 具体出现在什么位置。
搜索蜘蛛发现新 URL,主要靠 a 标签
从搜索引擎公开说明和服务器日志看,页面里能稳定触发 URL 发现的,主要是可点击的 a href 链接。搜索蜘蛛抓到一个页面后,会解析 HTML,提取其中的链接,再按抓取策略决定是否跟进。a 标签被优先处理,是因为它语义明确,代表这个页面指向另一个页面。其他位置出现的网址,要么不被解析,要么只被当成资源引用,不进入待抓取队列。
不同位置的 URL,被发现的差别很大
相对可靠的几种写法
- a href:最稳,也是最推荐的方式。
- link rel=alternate(多语言或多版本指向):部分搜索引擎会解析,但用途有范围限制。
- 页面内正常的锚文本链接:无论文字还是图片外面包一层 a,效果都比裸地址好。
基本只当资源的位置
img src、iframe src、video 与 audio 的 source、CSS 里的 background-image,写的都是资源地址。搜索引擎会去抓图片、CSS、JS 文件本身,用来渲染和理解页面,但不会因为一个图片地址里写着某个网页 URL,就把那个网页当成新页面去抓。iframe 稍微特殊,部分搜索引擎会解析其中的内容,但这是为了理解页面,不保证把 iframe 内的链接当外链跟进。
容易被误解的位置
form action 通常在用户提交时才产生请求,搜索蜘蛛一般不会主动提交表单。preload、prefetch 属于资源预加载提示,作用对象是资源,不是页面发现。meta refresh 属于页面级跳转,不同搜索引擎处理并不一致,拿它做入口页跳转风险偏高,不如直接用服务器端 301。
最不可靠的位置
如果 URL 只存在于按钮的点击事件、异步请求或字符串拼接里,搜索蜘蛛除非执行 JS 并触发对应逻辑,否则看不到。即便能渲染,通常也只把渲染后出现的 a 标签计入发现,动态请求本身不构成新的 URL 发现来源。
对蜘蛛池入口页的实际影响
入口页的核心作用是提供一条可被搜索蜘蛛读取的路径。如果路径藏在图片、CSS 或 JS 里,等于把入口页写成了一个普通展示页,搜索蜘蛛来了也未必带走目标 URL。反过来,只要 HTML 源码里存在正常的 a 标签,哪怕页面很朴素,URL 被读取的机会也会明显提高。
入口页摆链接的几条建议
- 每一个想推的目标 URL,至少有一条 a href 指向它,并且写在服务器返回的 HTML 源码里,不要依赖 JS 渲染或点击后才生成。
- 图片、CSS、iframe 里的地址可以保留,但不要把它们当成唯一的发现路径。
- 需要跳转就用 301 或 302,少用 meta refresh,也不要用 JS 跳转代替。
- 用浏览器禁用 JS 打开入口页,查看源码里还剩多少条链接,这基本就是搜索蜘蛛看到的样子。
- 不要为了塞链接把 URL 堆在 display:none 或零尺寸元素里,隐藏链接通常不会按正常链接对待。
判断标准很简单:URL 有没有写在 HTML 的 a 标签里,能不能在禁用 JS 的情况下看到。能,才有被发现的基础;不能,就先别把希望放在它身上。
入口页的结构不需要复杂,链接位置清晰、源码可见,比堆砌各种花哨写法更有用。做完之后隔一段时间看日志里对目标 URL 的抓取记录,比对着页面猜更实在。