在蜘蛛池入口頁里放連結,最常见的寫法是 a 标簽加 href。但實际运营中,很多人會把目标地址藏在图片、按钮、表單甚至 CSS 背景里,理由是“用戶点得過去,蜘蛛應该也看得到”。這里其實是两件事:能被点击,和能被搜尋蜘蛛解析成可跟進的連結,並不等價。
搜尋蜘蛛發現連結,靠的是什么
搜尋蜘蛛抓到一個 HTML 之後,會先做文档解析,再從解析结果里提取連結。對绝大多數搜尋引擎来说,最稳定、最直接的可發現連結就是 a 元素上的 href,以及 area 這類语义相同的标簽。其他位置上的地址,要么需要額外的渲染成本,要么根本不在連結提取的范围内。
能被解析成連結的,才會進入 URL 發現队列;能被点击的,不一定進得去。
几種常见寫法的實际结果
a 标簽包住图片:可以
這是最稳妥的图片連結寫法。a 的 href 里放目标地址,图片只作為锚文本的替代内容。蜘蛛從 href 就能拿到 URL,图片本身只影响這條連結的可讀性,不影响發現。
單獨的 img,地址寫在 src 里:不行
图片的 src 是资源地址,不是連結。蜘蛛會把它当成需要抓取的图片资源,但不會把它当成“可以繼續跟進的頁面入口”。即使這張图本身就是一張可点击的導航图,只要外面没套 a,就不會产生連結關系。
button、div 加 onclick 或事件监听:不行
這類寫法依赖 JavaScript 执行,地址往往藏在脚本變量里。搜尋引擎對 JS 渲染的支持程度不一,就算能渲染,按钮本身在連結图里也没有明确位置。把入口頁的 URL 發現押在這上面,稳定性很差。
表單的 action:不作為普通連結跟進
表單的 action 是提交地址。蜘蛛一般不會像對待頁面連結那样主動去“点”一個表單並跟進提交结果。把它当連結通道用,基本是無效的。
CSS 背景图或伪元素里的地址:不行
寫在样式文件或 style 属性里的图片地址,连图片资源都未必被抓,更不可能产生頁面連結。
图片热区 area:可以
area 标簽带 href 时,语义上等同于連結,通常能被正常提取。不過它依赖 map 结构,可讀性和维護性都不如直接寫 a,實际用得少。
為什么這些寫法容易让人誤判
因為判断标准常常是“我自己点了一下,能打開”。但人工点击走的是浏览器渲染路径,而連結發現走的是文档解析路径。這两條路径的交集只有一部分。入口頁恰恰是拿来给蜘蛛發現 URL 用的,如果结构上不具备可解析性,用戶端再顺滑也没有意义。
想保留按钮或图片外观,可以這样改
- 外观交给 CSS,结构交给 a。 想做按钮样式,就给 a 加样式類,让它看起来像按钮,而不是用 button 元素代替連結。
- 图片一定要套 a。 图片導航、banner 入口,外层都补一個指向目标頁的 a 标簽,href 寫真實地址。
- href 里直接放最终地址。 不要留空再用脚本补,也不要只寫 # 或 javascript:。
- 地址不要经過事件函數。 需要记錄点击可以做埋点,但不要让埋点成為获取地址的唯一途径。
改完之後按這個顺序自查
- 查看頁面源碼,搜目标域名或路径,確認它出現在某個 href 里,而不是只出現在脚本、样式或图片属性中。
- 禁用 JavaScript 再打開頁面,看關键入口是否還能以連結形式存在。
- 用抓取工具的纯 HTML 抓取模式取一次頁面,看返回的源碼里有没有這些連結。
- 清理掉指向已失效頁面的舊連結,避免入口頁里堆积無效入口。
几個常见誤区
第一,認為“蜘蛛會渲染,所以什么寫法都行”。渲染是有成本的,也不保證完整执行。第二,認為連結數量够多就一定有效,如果其中大部分不是 a 标簽,實际能被發現的可能很少。第三,只改首頁模板,忽略了列表頁、詳情頁里的同類問题。
總结一句:入口頁里想让搜尋蜘蛛發現並跟進某個地址,最省事的做法始终是把它放進 a 标簽的 href 里。样式可以做得花哨,但承载地址的那层结构越简單越好。