搜尋抓取

服務器日誌里的抓取路径:蜘蛛到底是從哪找到這條 URL 的

服務器日誌是判断 URL 發現路径最完整的记錄。本文說明怎样用 User-Agent、Referer、狀態碼和訪問時間,区分 Sitemap 带来的抓取與内鏈带出的抓取,找出長期没有被訪問的 URL,並把抓取频次的變化和服務器响應狀態對應起来看。

搜尋抓取

服務器日誌里的抓取路径:蜘蛛到底是從哪找到這條 URL 的

很多人判断蜘蛛来没来過,习惯去看站長後台的抓取統計。但後台資料有延迟,也有抽样,真正完整、可追溯的记錄在自己服務器的訪問日誌里。日誌能回答一個很具体的問题:某條 URL 是被 Sitemap 带進来的,還是被站内某條連結带進来的,或者根本没有被訪問過。

日誌里值得關注的几類字段

  • User-Agent:区分 Googlebot、Bingbot、Baiduspider,也区分移動版與桌面版的抓取器。
  • 請求路径與查询串:看清蜘蛛實际請求的是带參數的地址,還是規范化之後的地址。
  • 狀態碼與响應時間:200、301、404、5xx 的分布,以及每次响應的耗时。
  • 訪問時間:判断抓取是集中在某個时段,還是相對均匀地铺開。
  • Referer:部分抓取請求會带上来源頁面,可以據此還原抓取路径。

判断一條 URL 是被什么带出来的

Sitemap 带来的抓取

這類請求通常有两個特征:路径集中在 Sitemap 列出的地址上,時間点和 Sitemap 更新或提交的時間接近;而且首次訪問常常不带 Referer。看到這種形態,說明入口文件起了作用。

内鏈带出来的抓取

如果某條新 URL 的首次訪問,Referer 指向站内某個列表頁或文章頁,說明蜘蛛是沿着連結爬過来的。這时候值得回头看那條連結的位置:位置越浅、上下文越相關,後續被回訪的概率通常越高。

長期不出現的 URL

日誌里始终没有记錄的地址,一般有三種原因:它没有被任何内鏈或 Sitemap 提到;它被 robots.txt 拦住了;或者指向它的上层頁面本身就没有被有效抓取。排查时按這個顺序走,比一上来就怀疑網站被降權要靠谱得多。

用日誌核對 Sitemap 與内鏈的分工

Sitemap 主要解决“有没有被發現”,内鏈主要解决“值不值得繼續爬、要不要回来再看”。日誌可以帮你驗證這两件事是否真的生效:把 Sitemap 提交的 URL 清單和日誌里實际出現的 URL 做一次差集,長期没有訪問记錄的那部分,往往說明這些地址缺少内鏈支撑。只靠提交 Sitemap,並不一定換来持續回訪。

抓取频次下降时,先看服務器

如果日誌里蜘蛛的請求量突然變少,先別急着改标题和正文。检查同一时段的 5xx 比例、平均响應時間、有没有连接被中断的记錄。蜘蛛来訪时如果频繁遇到错誤或者响應拖得太久,队列里的 URL 會被往後排,URL 發現的节奏也會跟着變慢。這類問题在日誌里看得很清楚,在後台报表里往往只表現為一條向下的曲线。

几個容易被誤讀的地方

  • 日誌里有請求,不等于頁面會被收錄,抓取只是進入處理流程的第一步。
  • 同一個 User-Agent 的請求可能来自不同机房,不必按 IP 段逐一放行或封禁。
  • 頁面脚本在浏览器端产生的請求,不一定都會出現在服務器日誌里,取决于渲染方式。
  • 移動版抓取器的訪問量變化,通常比桌面版更值得盯一盯。

一份可以落地的复盘节奏

  1. 按周導出日誌,按 User-Agent 和狀態碼拆分統計。
  2. 把 Sitemap 清單與日誌訪問清單對照,标出長期無訪問的 URL。
  3. 抽查這些 URL 的内鏈情况,补上位置合理的入口連結,而不是把連結堆在頁脚。
  4. 记錄調整前後的抓取频次變化,观察两到四周再判断是否有效。
日誌的價值不在于證明蜘蛛来過,而在于找出它没有走的那條路。