百度推送成功不等于收录,区别在哪

先说结论:中间隔着两步。推送成功只说明百度把 URL 收下了,后面还有"派蜘蛛来抓"和"抓完建索引"两步,这两步都不归你管,也都不会通知你。

今天早上我把自查脚本又跑了一遍。输出分两块,第一块是推送记录:

合计:成功 16 / 失败 0 / 无记录 0

16 篇,全绿。第二块是真蜘蛛的来访记录:

      4 /tag/2025生活小妙招
      2 /author/1/page/2157
      1 /

七次。四次标签页、两次作者分页、一次首页。文章页,0 次。

也就是说,我推了 16 篇正文进去,百度一篇都没来抓过。

第一层:接口说"收下了"

推送接口的返回长这样,这是百度服务端回的原文:

{"remain":8,"success":1}

success:1 的意思是这条 URL 被收下、进了待抓队列,remain:8 是今天还能再推 8 条。

失败的时候它也不含糊:

{"error":400,"message":"over quota"}

这是配额用尽。想自己验也不难,直接发一条过去看它回什么:

curl -s -X POST 'https://data.zz.baidu.com/urls?site=你的域名&token=你的token' \
  -H 'Content-Type: text/plain' --data-binary @urls.txt

成功和失败都写在响应里,所以这一层是真好验的 —— 拿到响应就知道,不用猜。

问题是很多人(包括一开始的我)看到"成功"两个字,就默认后面两步也一起完成了。

第二层:蜘蛛到底来没来

这一层只能去对方侧查,也就是服务器日志。我第一次查还查错了。

当时想数"真蜘蛛抓了多少文章页",顺手写了这么一句:

grep -E '220\.181\.|116\.179\.' 站点日志 | grep -c '\.html'

结果是 7,跟真蜘蛛总数一模一样。我还挺高兴,直到把那几行打出来看:

220.181.108.159 - - [06/Oct/2026:06:21:45 +0800]
"GET /author/1/page/2157 HTTP/2.0" 404 162 "-" 
"Mozilla/5.0 (compatible; Baiduspider/2.0;
+http://www.baidu.com/search/spider.html)"

命中 .html 的是 UA 末尾那个 spider.html,不是我抓的页面。

日志行结构:路径在第 7 个字段,UA 末尾的 spider.html 会把统计带偏
日志行结构:路径在第 7 个字段,UA 末尾的 spider.html 会把统计带偏

正确的数法是只取请求路径那一段,日志里它是第 7 个字段:

grep -E '220\.181\.|116\.179\.' 站点日志 \
  | awk '{print $7}' | sort | uniq -c | sort -rn

这一改,7 就散成了 4 + 2 + 1,文章页是 0。

真百度蜘蛛 7 次访问的落点:标签页 4、作者分页 2、首页 1、文章页 0
真百度蜘蛛 7 次访问的落点:标签页 4、作者分页 2、首页 1、文章页 0

(顺带一句:日志里 UA 写着 Baiduspider 的一共 14 次,真的只有 7 次,另外 7 次是扫描器和服务器自己。怎么分辨我之前写过,这里不重复。)

第三层:抓了也不等于收

蜘蛛抓走一份 HTML,只是把内容取回去了。取回去之后还得建索引 —— 百度自己判断要不要放进搜索结果、放进去之后排在哪。这一步你在自己服务器上查不到任何痕迹。

三个信号能看,但每个只看得到一段:

信号 能看到 看不到
服务器日志 蜘蛛来没来、抓的哪个地址、返回什么状态码 抓完之后有没有建索引
site: 搜索 这个 URL 在不在索引里 建索引之前那段等待期什么样
站长平台「索引量」 全站进了索引多少条 具体是哪几条、什么时候进的

三个交叉对上,才算真收录。单看任何一个都可能骗人:日志有记录不代表收了,site: 没结果也不代表没推成功。

三层各自验什么:接口层看响应、抓取层看日志、索引层看站长平台
三层各自验什么:接口层看响应、抓取层看日志、索引层看站长平台

中间那段空白是什么

推完到被抓之间,隔着一个百度自己的排期。新站尤其明显:站就那么点权重,一天能分到的抓取次数有限,它先抓首页和聚合页,正文排在后面。

具体排期多久,我没查证过,不敢编。能说的是我站上的实测:9 天,推了 16 篇,真蜘蛛一共来 7 次,正文 0 次。这是新站的正常状态,不是哪个配置写错了。

反过来,推送本身不是没用 —— 它解决的是"百度压根不知道有这个页面",这是后面所有事的前提。只是别把前提当成结果。

还有一种"成功",比这个更坑

这次说的"推送成功但不收录",至少推送是真的发出去了。我踩过另一种:按钮显示"推送成功",实际一个请求都没发 —— 因为我自己写的函数开头有个"6 小时内推过就跳过"的短路。那个坑在这篇里。

再往前还有一种:脚本直接写数据库发文,绕过了 WordPress 钩子,推送压根没触发,连"成功"两个字都没有。那个在这篇里。

三种"成功"的成色差很远:接口回了响应是真的,按钮显示成功可能是假的,连记录都没有的一定没发。

所以现在我看的就一个数:真蜘蛛抓文章页的次数。今天还是 0。

发表评论