把入口頁的連結做成图片、按钮或纯 JS 点击,是很多站点改版时顺手做的事。放到蜘蛛池入口頁上,最容易出現的结果是:頁面看起来有入口,搜尋蜘蛛却什么都没拿到。下面按“搜尋蜘蛛怎么找連結—哪些寫法會丢—怎么补回来”讲清楚。
搜尋蜘蛛提取連結的基本方式
搜尋蜘蛛解析 HTML 时,最主要的連結来源就是 a 标簽的 href 属性。只要 href 是一個可解析的 URL,並且這個 a 标簽出現在服務器返回的 HTML 里,或者渲染後能稳定出現,它就有机會被跟進。
图片、按钮本身不具备“指向某個 URL”的语义,除非外面套了 a 标簽,或者有額外的机制把 URL 暴露出来。
几種看起来有連結、實际抓不到的寫法
- 图片包在 a 标簽里:可以。img 放在 a href 内部,連結照样能提取,图片只是可点击的外观。
- 纯 img 的 src 指向目标頁:不行。src 是资源地址,不被当作頁面連結,只可能被当作图片资源去抓。
- button 加 onclick 跳轉:通常不行。onclick 里的 URL 不是連結,搜尋蜘蛛一般不會执行頁面上所有脚本去翻找 URL。
- a 标簽没有 href,只挂 JS 事件:不行。没有 href 就没有可解析的目标。
- href 寫成 javascript:void(0):不行。這不是可抓取的 URL。
- 用 CSS background-image 做入口:不行。样式表里的图片地址不构成頁面連結。
- 靠表單提交後跳轉:一般不行。除非提交後的目标本身能被獨立發現。
想保留图片或按钮外观,可以這样补一條路径
- 外面套 a href,把图片或按钮图形放進 a 内部,外观不變,連結可提取。
- 同一個入口再补一個文本 a 連結,可以放在正文末尾或“相關入口”列表里,避免只有图形入口。
- 如果入口是 JS 渲染出来的,確認渲染後的 HTML 里确實存在 a href,並且不依赖用戶交互才出現。
- href 用绝對路径寫,减少解析歧义;跨域时尤其注意协议和域名是否完整。
- 入口頁不要只靠一個連結承载,同頁给出多一條通往同一目标的自然連結,可降低單点失敗的概率。
上线前的自查方法
- 禁用 JavaScript 抓取一次頁面,看連結是否還在。
- 查看“查看網頁源代碼”而不是浏览器审查元素,確認 href 出現在原始 HTML 里。
- 用抓取工具或 curl 拉一遍 HTML,检索目标 URL 是否出現。
- 到服務器訪問日誌里確認搜尋蜘蛛是否真的請求了入口頁,以及是否請求了目标 URL。
- 如果日誌里入口頁有抓取、目标 URL 長期没有請求,基本可以判断連結没有被识別出来。
提示:把入口做成图片或按钮並不會直接带来惩罚,它只是让 URL 發現少了一條路。發現路径變少,抓取节奏可能變慢,但不等于收錄一定出問题——目标 URL 本身是否可抓取、内容是否值得收錄,仍是更靠前的影响因素。
小结
搜尋蜘蛛只認它解析得到的 URL。外观可以用图片和按钮来做,但 href 這條机器可讀的路径最好不要省。入口頁的职责是把 URL 稳定地暴露出来,把样式和發現能力分開處理,通常比事後去猜為什么没抓更省事。