刚开始做站的时候,我以为把 sitemap 提交上去,搜索引擎就会自己来抓。

等了两周,一篇文章没收录。

后来才知道,百度还有个"主动推送"接口——你直接把 URL 推给它,它会优先排队抓取。这个是新站最有效的手段。

但它有个硬限制:普通站点每天 10 条配额。

这篇讲清楚怎么用,以及这 10 条怎么分配才不浪费。

一、先搞清楚有几种提交方式

百度搜索资源平台(原站长平台)提供四种:

方式说明实时性
sitemap 提交提交整个站点的地图文件慢,几周
主动推送(API)一条一条实时推快,几分钟到几天
手动提交网页上填 URL中
自动推送(JS)页面被访问时自动推被动,需要有人访问

对新站来说,主动推送是唯一能快速见效的。

sitemap 是基础,必须有;主动推送是加速器。

二、拿到 token

  1. 登录百度搜索资源平台(ziyuan.baidu.com)
  2. 添加你的站点,验证归属(我用的是 HTML 标签验证,往首页 head 里加一行 meta)
  3. 验证通过后,进"普通收录" → "API 提交"
  4. 页面上会给你两样东西:接口地址 和 准入密钥(token)

接口地址长这样:

http://data.zz.baidu.com/urls?site=https://www.moxiaoa.com&token=你的密钥

密钥是一串字母数字,前半段是站点标识,后半段是私有 token。这东西别泄露,泄露了别人能拿你的配额刷垃圾 URL。

三、怎么推

一条 curl 就够了:

curl -H 'Content-Type:text/plain' \
  --data-binary 'https://www.moxiaoa.com/post/47-新站一个月只收录首页.html' \
  'http://data.zz.baidu.com/urls?site=https://www.moxiaoa.com&token=你的token'

多条的话,用换行分隔:

curl -H 'Content-Type:text/plain' \
  --data-binary $'https://www.moxiaoa.com/post/47-new-site-homepage-only.html\nhttps://www.moxiaoa.com/post/48-baidu-push-quota.html' \
  'http://data.zz.baidu.com/urls?site=https://www.moxiaoa.com&token=你的token'

返回是 JSON:

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

四、四种返回结果,对应四种问题

我踩过的都列出来:

1. 成功

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

2. 配额用完

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

说明当天 10 条用完了,第二天 0 点重置。别重试,重试也没用。

3. 站点不匹配

{"error":400,"message":"not_same_site"}

这是最常见的问题:推送的 URL 域名必须和 token 绑定的 site 完全一致。

我绑定的是 https://www.moxiaoa.com,结果推送时用了 https://moxiaoa.com(不带 www),直接被拒。

带 www 和不带 www,在百度眼里是两个站。所以绑定的时候就要想清楚用哪个版本,然后全站统一。

4. URL 格式错误

{"error":400,"message":"over quota"} // 或者 not_valid

常见原因:

五、10 条配额怎么分配

这是最实际的问题。我一天发两篇,10 条配额看起来够,但要算清楚:

优先级内容每天占用
高当天新发的文章1-3 条
高首页(有更新时)偶尔 1 条
中改过标题或内容的老文章偶尔 1-2 条
低分类页、标签页不急,走 sitemap

我的实际分配:

注意:重复推同一个 URL 会消耗配额。 已经推过的,别天天推,隔三五天推一次就够了。

六、自动化:上传完自动推送

我的站有个上传后台,写完文章点发布,自动推送。

核心逻辑(Python):

import urllib.parse
import urllib.request

def push_baidu(urls, site, token):
    api = f"http://data.zz.baidu.com/urls?site={site}&token={token}"
    data = "\n".join(urls).encode("utf-8")
    req = urllib.request.Request(
        api,
        data=data,
        headers={"Content-Type": "text/plain"},
        method="POST",
    )
    with urllib.request.urlopen(req, timeout=10) as resp:
        return resp.read().decode("utf-8")

调用:

result = push_baidu(
    ["https://www.moxiaoa.com/post/47-新站.html"],
    "https://www.moxiaoa.com",
    "你的token"
)
print(result)  # {"remain":9,"success":1}

注意两点:

七、推送之后多久收录

我的实测:

文章推送时间收录时间
第 1 篇10 月 12 日未收录(35 天后)
第 25 篇10 月 20 日未收录(27 天后)
第 26-34 篇10 月 28 日未收录(19 天后)

说实话,推送了不等于收录。

推送只是"告诉百度这里有新内容",收录与否还要看:

所以别把主动推送当成"包收录",它只是让你排上队。

八、还有两个免费的加速手段

1. 让页面被真实访问

百度会参考页面的实际访问情况。有人访问、有停留、有点击,收录会快一些。

怎么来访问?我在知乎发文章,文末放站内链接,知乎的流量会带过去一部分。

2. 外部链接

别的站链到你,是明确的信任信号。我在知乎、几个技术社区的个人简介里放了站址。

不用刻意做外链,正常分享就行。

九、几句实话

主动推送这东西,对老站是锦上添花,对新站是雪中送炭——但也就那么点炭。

10 条配额,一天推 10 篇,第二天还是没收录,这种事我遇到过。

真正决定收录的还是:

  1. 站点能稳定访问
  2. 内容是自己写的、有信息量
  3. 结构清晰,搜索引擎能读懂(这个下一篇讲)
  4. 时间

SEO 没有捷径,主动推送只是让你少等几天。

下一篇讲 TDK、canonical、sitemap、JSON-LD 这四样怎么配,这是收录的地基。

如果你也在折腾这套服务,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。