抓取和入库,是两條不同的鏈路
不少人排查問题时,把“搜尋蜘蛛来過入口頁”直接等同于“目标 URL 會進索引”。實际上這是两件事:抓取只說明爬虫把入口頁拿走了,入库還要经過解析、去重、质量评估、索引篩選等环节。入口頁被抓到、目标連結被發現,只走完了第一步。
所以当入口頁日誌里有大量蜘蛛记錄、目标 URL 却迟迟不出現时,先別急着改入口頁。按下面的顺序定位,能省掉很多無用功。
第一步:確認日誌里的抓取是不是有效抓取
服務器日誌只记錄請求,不记錄结果。同样一條蜘蛛记錄,可能代表一次成功抓取,也可能代表一次被拒的訪問。
看狀態碼
- 200:正常返回,繼續往下查。
- 301 / 302:看跳轉终点是不是你想让蜘蛛看到的那一頁,跳轉鏈太長容易被放弃。
- 403 / 503:多半是防火墙、CDN 規則或频率限制拦了,蜘蛛拿不到内容,自然也不會去解析里面的連結。
- 404:入口頁路径寫错或已刪除。
看返回内容與抓取路径
如果日誌里只有入口頁被訪問,目标 URL 一條记錄都没有,說明蜘蛛没有沿着連結繼續走。這时重点看連結是否可被常規解析——纯 JS 渲染、藏在交互之後、或需要登入才出現的連結,都可能看不到。
第二步:查目标 URL 自己有没有被拒的理由
入口頁没問题,不代表目标頁没問题。下面這些是目标 URL 不入库的常见原因:
- 目标頁 robots.txt 禁止抓取,或 meta robots 寫了 noindex。
- 目标頁 canonical 指到了別的 URL,等于把票投给了別人。
- 目标頁與站内其它頁面高度重复,被判定為重复内容而合並。
- 正文過薄,或主要内容靠 JS 渲染,抓取时拿到的是一片空白。
- 頁面返回 5xx、加载超时,或需要特定 UA、Cookie 才能正常打開。
把目标 URL 單獨丢進抓取工具,或直接看日誌里返回的内容,比盯着入口頁看半天更有效。
第三步:看入口頁给出的上下文够不够
入口頁的作用是让連結被看到,不是替目标頁背书。但如果入口頁本身就是一堆孤立連結、没有正文、没有主题词,蜘蛛對連結的判断會更保守,抓取優先級也容易靠後。
比較實用的做法是:让入口頁带一個明确的主题段落,锚文本和目标頁内容對得上,而不是全部寫成“点击這里”“詳情”。锚文本不必刻意堆词,但至少让人和爬虫都能看懂這一頁大概在讲什么。
第四步:考虑抓取预算和站点整体情况
同一個站点下如果頁面數量很大、质量參差,蜘蛛會把有限的抓取量放在它認為更有價值的部分。新站或權重較低的站点尤其明顯:入口頁的連結不是看不见,而是排在队尾。
另外要留意,多個域名、多個入口頁挂在同一台服務器、同一個 IP 上时,整体抓取频次是共享的。某一批入口頁抓取量突然上来,其它入口頁可能就會被压缩。
一套可执行的排查顺序
- 在日誌里筛出搜尋蜘蛛的 UA,確認訪問的确實是入口頁。
- 核對狀態碼和返回内容長度,排除拦截、跳轉、空白頁。
- 單獨訪問目标 URL,检查 robots、meta robots、canonical 三項。
- 做一次抓取測試,看目标頁在無 JS、無 Cookie 的情况下能否拿到正文。
- 检查入口頁連結是否為标准 a 标簽、能否被直接解析。
- 對比同站其它已入库頁面,看目标頁在结构、内容深度上差在哪。
排查這類問题时,最忌一上来就改入口頁。先把“抓取—發現—解析—篩選”這條鏈路逐段排除,剩下的那一段才是真正要修的地方。
小结
入口頁被抓取,只說明發現环节走通了。目标 URL 没入库,可能是目标頁被規則挡住,也可能是内容本身過不了篩選。按日誌、狀態碼、目标頁規則、抓取渲染、站点整体這几步依次排查,比盲目堆連結、加入口頁要靠谱得多。