刚开始做站的时候,我以为把 sitemap 提交上去,搜索引擎就会自己来抓。
等了两周,一篇文章没收录。
后来才知道,百度还有个"主动推送"接口——你直接把 URL 推给它,它会优先排队抓取。这个是新站最有效的手段。
但它有个硬限制:普通站点每天 10 条配额。
这篇讲清楚怎么用,以及这 10 条怎么分配才不浪费。
一、先搞清楚有几种提交方式
百度搜索资源平台(原站长平台)提供四种:
| 方式 | 说明 | 实时性 |
|---|---|---|
| sitemap 提交 | 提交整个站点的地图文件 | 慢,几周 |
| 主动推送(API) | 一条一条实时推 | 快,几分钟到几天 |
| 手动提交 | 网页上填 URL | 中 |
| 自动推送(JS) | 页面被访问时自动推 | 被动,需要有人访问 |
对新站来说,主动推送是唯一能快速见效的。
sitemap 是基础,必须有;主动推送是加速器。
二、拿到 token
- 登录百度搜索资源平台(ziyuan.baidu.com)
- 添加你的站点,验证归属(我用的是 HTML 标签验证,往首页 head 里加一行 meta)
- 验证通过后,进"普通收录" → "API 提交"
- 页面上会给你两样东西:接口地址 和 准入密钥(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}
success:这次成功推送了几条remain:今天还剩多少配额
四、四种返回结果,对应四种问题
我踩过的都列出来:
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
常见原因:
- URL 里有中文没编码(有些接口能接受,有些不接受)
- 推送了 404 页面
- 推送了带参数的动态 URL
五、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}
注意两点:
- 用 POST,
Content-Type: text/plain - URL 之间用
\n分隔,不是逗号
七、推送之后多久收录
我的实测:
| 文章 | 推送时间 | 收录时间 |
|---|---|---|
| 第 1 篇 | 10 月 12 日 | 未收录(35 天后) |
| 第 25 篇 | 10 月 20 日 | 未收录(27 天后) |
| 第 26-34 篇 | 10 月 28 日 | 未收录(19 天后) |
说实话,推送了不等于收录。
推送只是"告诉百度这里有新内容",收录与否还要看:
- 站点权重(新站权重低)
- 内容质量
- 是否有重复内容
- 抓取配额
所以别把主动推送当成"包收录",它只是让你排上队。
八、还有两个免费的加速手段
1. 让页面被真实访问
百度会参考页面的实际访问情况。有人访问、有停留、有点击,收录会快一些。
怎么来访问?我在知乎发文章,文末放站内链接,知乎的流量会带过去一部分。
2. 外部链接
别的站链到你,是明确的信任信号。我在知乎、几个技术社区的个人简介里放了站址。
不用刻意做外链,正常分享就行。
九、几句实话
主动推送这东西,对老站是锦上添花,对新站是雪中送炭——但也就那么点炭。
10 条配额,一天推 10 篇,第二天还是没收录,这种事我遇到过。
真正决定收录的还是:
- 站点能稳定访问
- 内容是自己写的、有信息量
- 结构清晰,搜索引擎能读懂(这个下一篇讲)
- 时间
SEO 没有捷径,主动推送只是让你少等几天。
下一篇讲 TDK、canonical、sitemap、JSON-LD 这四样怎么配,这是收录的地基。
如果你也在折腾这套服务,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。