蜘蛛進入一個站,通常從首頁開始,顺着連結一层层往外走。走到第三、第四层之後,頁面上的連結變少,能回到主干的路也變少。這时候面包屑和“返回上一級”這類導航,就成了蜘蛛繼續往前走、或者回到主干的重要线索。
深层頁面為什么容易變成终点
很多站点的詳情頁只放正文和几條相關推荐。相關推荐如果是随机拼出来的,連結指向的頁面未必稳定;頁面底部又没有回到分類或首頁的入口,蜘蛛從這個頁面出發能走的路就很有限。结果就是抓取深度停在某一层,後面的 URL 只能等下一次從別的地方被發現。
面包屑和返回連結解决的正是這個問题:它們把深层頁面重新接回上层结构,让抓取路径形成回路,而不是一條断掉的线。
面包屑该指向哪里
- 每一級都應是真實存在、可訪問的列表頁或频道頁,不要拼出並不存在的路径。
- 层級要和站点實际结构一致,URL 是三級目錄,面包屑也應是三級,別多也別少。
- 最後一級通常是目前頁,可以不連結,也可以指向自身,但不要指向 404。
- 文字用頁面真實标题或分類名,避免“更多”“点击這里”這類没有信息量的词。
面包屑最好是服務端輸出的静態 a 标簽。如果它靠 JS 渲染,蜘蛛能不能看到就要看渲染能力,很多时候直接看不到,等于没寫。
返回連結與“上一級”入口
列表頁的返回按钮、詳情頁顶部的“返回栏目”,作用類似。寫法上注意两点:一是連結指向列表的稳定地址,而不是带一堆參數的會话地址;二是列表頁本身要能被抓取,否則蜘蛛顺着返回連結走過去也是撞墙。
返回連結不等于必须做“上一頁”。把用戶從詳情頁带回分類,比让蜘蛛在分頁里原地打轉更有價值。
容易踩的几個坑
- 面包屑用脚本拼接,頁面源碼里根本没有 href。
- 层級寫错,比如商品属于“手机 > 安卓机”,面包屑里却直接從首頁跳過来。
- 返回連結指向带排序或會话參數的地址,同一個列表出現多個版本。
- 移動端和桌面端结构不一致,一個能点,一個点不動。
- 面包屑指向的列表頁已被刪除或屏蔽,蜘蛛走到一半路就断了。
怎么確認蜘蛛真的走了這條路
最直接的办法是看日誌:篩選蜘蛛的 User-Agent,观察分類頁、频道頁是否被反复訪問,還是只有詳情頁被零星抓到。如果詳情頁抓取量不低,對應的分類頁却几乎没有记錄,說明路径可能没通。也可以临时在面包屑連結上带一個标记參數,看蜘蛛是否訪問過带這個參數的地址。
Sitemap 能列出 URL,但它不表達层級關系;真正决定蜘蛛能不能沿着结构走的,還是頁面之間的連結。面包屑和返回連結属于基础工作,做好了不會立刻带来什么變化,但结构断裂的站点,往往就是從這里開始出問题。服務器返回是否稳定、返回連結指向的頁面是否可用,同样會影响這條路径能不能走通。