做蜘蛛池入口頁时,多數人會把目标 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 的抓取记錄,比對着頁面猜更實在。