不少蜘蛛池入口頁為了省事或让頁面看起来更“動態”,把目标 URL 交给 JavaScript 拼出来,再插入到頁面里。問题也随之出現:搜尋蜘蛛到底會不會执行這些脚本,並顺着連結發現目标 URL?答案不是简單的“會”或“不會”,得看它走到了哪一步。
先分清两條抓取路径
搜尋蜘蛛第一次抓取时,拿到的是服務器返回的原始 HTML。如果目标連結不在原始 HTML 里,第一遍解析就看不到。之後搜尋引擎可能把頁面放進渲染队列,用無头浏览器执行 JavaScript,再解析一次渲染後的 DOM。渲染要消耗額外资源,是否执行、多久执行、执行到什么程度,各搜尋引擎策略不同,也會受頁面優先級影响。
蜘蛛池入口頁往往數量多、正文薄、連結结构复杂,在渲染队列里通常不占優势。連結只靠 JavaScript 生成,被發現的時間會被拉長,也可能一直等不到渲染那一步。
哪些寫法風險較高
- 用 document.write 或 innerHTML 在頁面加载後插入 a 标簽。
- 用 onclick 做跳轉,href 寫成空值或 javascript:void(0)。
- 連結地址放在接口返回的 JSON 里,前端請求後再渲染。
- 前端框架客戶端渲染,首屏 HTML 里没有可跟的連結。
這些寫法對真實用戶可能正常,但搜尋蜘蛛不一定执行到那一步。尤其是連結地址依赖异步請求时,渲染时机和網絡狀態都會影响结果。
怎么驗證是否被跟到
- 用 curl 或查看網頁源代碼,確認目标 URL 是否出現在原始 HTML 中。
- 用搜尋引擎的 URL 检查工具,查看渲染後的 HTML 里有没有連結。
- 看服務器日誌:搜尋蜘蛛有没有請求相關 JS 文件或接口,有没有直接訪問目标 URL。
如果原始 HTML 没有、渲染後也没有,就不要指望它自動發現。反過来,如果原始 HTML 里已经存在連結,即使样式或位置不起眼,被跟到的概率也會高很多。
更稳妥的做法
- 把關键連結直接寫進初始 HTML 的 里,JavaScript 只做交互增强。
- 确實需要動態生成时,至少保留服務端渲染或预渲染版本。
- 入口頁數量大时,用 sitemap 或提交接口补充 URL 發現渠道,別把發現完全押在脚本上。
- 检查 robots.txt,避免誤屏蔽 JS 文件或接口路径,導致頁面無法正常渲染。
JavaScript 渲染是补充手段,不是發現連結的可靠主路径。入口頁這種场景,能寫在 HTML 里的連結就別留给脚本。
總结一句:搜尋蜘蛛會执行一部分 JavaScript,但不等于會执行你的每一段脚本。目标 URL 能不能被發現,先看原始 HTML 里有没有它。