百度API推送、IndexNow、Google Indexing API、sitemap自动提交,四个通道的配额、速度和适用场景差在哪
网站上线半个月,sitemap提交了三次,百度收录还是零。打开站长平台一看,API推送配额每天只有10条——但网站有3000个页面等着收录。这就是很多新站遇到的第一道坎:主动推送的"路"不止一条,但每条的规则、限制和效果差别很大,选错了等于白推。
主动推送这件事,本质上是告诉搜索引擎"我这里有新内容了,快来抓"。四个主流通道——百度API推送、IndexNow协议、Google Indexing API、sitemap自动提交——在底层逻辑、覆盖范围、推送配额上完全不同。你不需要每条都用,但得知道每条适合什么场景,才不至于每天10条配额白白浪费在重复URL上。
四个推送通道,一表看清差距
| 1 | 百度API推送:直达百度爬虫,配额每日10-3000条不等,适合中文站首选 |
| 2 | IndexNow:Bing + Yandex + Seznam共用协议,不限配额,适合国际化站点 |
| 3 | Google Indexing API:仅限JobPosting和BroadcastEvent类型页面,配额每天200条,非通用 |
| 4 | sitemap自动提交:所有搜索引擎通用,不占API配额,但速度最慢,适合兜底方案 |
一、百度API推送:中文站的"快车道",但配额是最大变量
百度主动推送(也叫"实时推送")是目前对百度收录速度最快的方式。它的底层逻辑不是"请百度来抓",而是直接把URL塞到百度爬虫的任务队列里。对比sitemap那种被动等百度周期抓取的方式,API推送能让新页面在几分钟到几小时内被爬虫访问,差距不是一点点。
但配额这件事,很多站长没搞明白就踩坑了。百度API推送的配额不是固定的,和站点"质量分"挂钩。新站一般每天10-100条,老站、有备案的站、内容更新频率高的站配额更高,部分大站可以到每天3000条甚至更多。这个配额每天刷新,当日不用完不累积。

配额查询方法:推送一次后看返回JSON里的 remain 字段。比如返回 {"success":1,"remain":2990} 说明推送成功1条,剩余2990条。也可以直接去百度搜索资源平台的"数据提交-主动推送"页面看。
每次API调用最多提交2000条URL,超过会返回400错误。推送的URL必须是已验证站点下的链接,提交其他域名的URL会返回not_same_site错误。URL格式要求是完整的http/https地址,一行一条,POST body用text/plain格式。
Python实现起来很简单,核心代码不超过20行:
import requestsAPI_URL = "http://data.zz.baidu.com/urls?site=www.example.com&token=你的token"def push_urls(url_list):headers = {"Content-Type": "text/plain"}for i in range(0, len(url_list), 2000):batch = url_list[i:i+2000]data = "".join(batch)resp = requests.post(API_URL, headers=headers, data=data)result = resp.json()print(f"第{i//2000+1}批: 成功{result.get('success',0)}条, "f"剩余{result.get('remain',0)}条")使用建议:配额少于100条的站点,只推送当天新增或更新的页面,不要重复推已收录的URL。配额充足的可以结合sitemap解析轮流推,但同一URL一天内不要重复推超过2次,百度那边有去重逻辑。
二、IndexNow:Bing系搜索引擎的"统一协议",配额不设限
IndexNow是微软Bing联合Yandex、Seznam推出的开源推送协议。它的设计理念和百度API推送不同:不绑定单一搜索引擎,而是让站长一次推送,所有支持IndexNow的搜索引擎同步收到通知。目前支持的有Bing、Yandex、Seznam,覆盖了英文搜索市场约15-20%的份额。
最大的优势是不设推送配额上限。你想推多少条就推多少条,没有每日限额的概念。这对于内容量大的英文站、外贸站来说,基本不需要纠结"今天推哪些不推哪些"的问题。
配置流程三步走:第一步,生成一个API Key(直接访问IndexNow官网的Key生成页面即可,随机字符串,16-32位);第二步,把这个Key存为一个文本文件放到网站根目录,比如 https://你的域名/abc123def456.txt,文件内容就是Key本身;第三步,调用IndexNow API提交URL。
import requestsINDEXNOW_URL = "https://api.indexnow.org/IndexNow"payload = {"host": "www.example.com","key": "你的API_Key","keyLocation": "https://www.example.com/你的API_Key.txt","urlList": ["https://www.example.com/new-page-1/","https://www.example.com/new-page-2/"]}resp = requests.post(INDEXNOW_URL, json=payload)print(f"推送状态: {resp.status_code}") # 200=成功每次推送的URL列表上限是10000条,超过需要分批。IndexNow返回HTTP 200表示收到请求,但不保证每条URL都成功——和百度API返回每条URL状态的机制不同。Bing站长后台可以看到推送记录和索引状态。
IndexNow适合谁
外贸独立站、英文内容站、多语种站点,尤其是Bing流量占比超过15%的站。WordPress有官方IndexNow插件,装好即用。
IndexNow不适合谁
纯中文站、百度为主要流量来源的站。IndexNow不支持百度,也不支持Google,对中文搜索市场覆盖几乎为零。

三、Google Indexing API:不是你想推什么就能推什么的
很多站长以为Google Indexing API和百度API推送一样,什么URL都能推。但实际上Google对这个API的限制非常严格——它只接受两种类型的页面:JobPosting(招聘信息)和BroadcastEvent(直播/活动信息)。普通文章页面、产品页面、首页都不在允许范围内。
如果你硬要把普通博客页面用Indexing API推送,Google不会报错,但也不会收录。它的判断依据是页面结构化数据(Schema标记)——必须包含对应类型的标记,Google才会接受推送请求。配额方面,每天200条,够用但不多。
关键提醒:别被一些教程误导说"用Indexing API批量提交所有页面",那是行不通的。Google官方明确表示只有JobPosting和BroadcastEvent类型可用。普通内容站正确的做法是提交sitemap到Google Search Console,或用Search Console里的"URL检查"工具手动请求索引。
如果确实运营招聘站或活动站,Indexing API的接入步骤:Google Cloud Console创建项目→启用Indexing API→创建服务账号→下载JSON密钥→在Search Console把服务账号邮箱添加为站点所有者→OAuth2.0调用API。
# 仅适用于JobPosting / BroadcastEvent类型from google.oauth2 import service_accountfrom googleapiclient.discovery import buildSCOPES = ["https://www.googleapis.com/auth/indexing"]KEY_FILE = "服务账号密钥.json"credentials = service_account.Credentials.from_service_account_file(KEY_FILE, scopes=SCOPES)service = build("indexing", "v3", credentials=credentials)body = {"url": "https://www.example.com/jobs/senior-engineer","type": "URL_UPDATED"}response = service.urlNotifications().publish(body=body).execute()print(response) # 成功会返回通知时间戳四、sitemap自动提交:最慢但最稳妥的兜底通道
sitemap提交是所有搜索引擎都支持的基础方式。把网站所有URL列在sitemap.xml里,提交到各搜索引擎的站长平台,爬虫会周期性抓取这个文件,按URL列表去爬页面。不占API配额,不限提交次数,但速度是四个通道中最慢的——百度可能几天才来抓一次sitemap,Bing和Google快一些但也做不到实时。
sitemap的真正价值不在于"快",而在于兜底和查漏补缺。API推送可能漏掉某些页面、配额用完推不完、或者推送接口临时故障——这时候sitemap是保底方案,保证爬虫最终能找到所有页面。另外,sitemap还能告诉搜索引擎页面的优先级(priority)、更新频率(changefreq)和最后修改时间(lastmod),这是API推送做不到的。
一个大站(超过5万页面)建议把sitemap拆分成多个子文件,用sitemap索引文件统一管理。单个sitemap文件不能超过50MB或50000条URL,超了搜索引擎会拒绝解析:
<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://www.example.com/sitemap-1.xml</loc><lastmod>2026-07-30</lastmod></sitemap><sitemap><loc>https://www.example.com/sitemap-2.xml</loc><lastmod>2026-07-30</lastmod></sitemap></sitemapindex>五、四个通道的核心差距,一张表说清楚
| 对比维度 | 百度API推送 | IndexNow | Google Indexing API | sitemap提交 |
|---|---|---|---|---|
| 覆盖搜索引擎 | 仅百度 | Bing、Yandex、Seznam | 仅Google | 所有搜索引擎 |
| 每日配额 | 10-3000+条(因站而异) | 无限制 | 200条 | 无限制 |
| 收录速度 | 分钟级~小时级 | 小时级~天级 | 小时级~天级 | 天级~周级 |
| 页面类型限制 | 无限制 | 无限制 | 仅JobPosting/BroadcastEvent | 无限制 |
| 单次推送上限 | 2000条 | 10000条 | 单条URL逐个推送 | 50000条/文件 |
| 去重机制 | 服务端自动去重 | 无明确去重 | 无明确去重 | 搜索引擎自行处理 |
| 状态反馈 | 逐条返回success/error | 仅HTTP状态码 | 返回通知时间戳 | 后台查看处理状态 |
| 适用站点类型 | 中文站、国内流量为主 | 外贸站、英文站、多语种站 | 招聘站、活动站(非通用) | 所有站点兜底 |
六、多站点怎么批量管?手工一个个推不现实

如果一个站还好,写个Python脚本定时跑就行。但如果你管着5个、10个、20个站——每个站有独立的百度token、独立的IndexNow key——手工管理的复杂度就爆炸了。
多站点批量推送的核心难点不是"怎么写推送代码",而是三个问题:怎么自动识别每个站当天新增了哪些URL?怎么根据不同站的配额自动分配推送量?推送失败后怎么重试和记录?
一个实用的多站点推送脚本结构:
import json, time, requests# 多站点配置SITES = [{"name": "中文主站", "domain": "www.cn-site.com","baidu_token": "token_abc", "baidu_quota": 1000,"indexnow_key": "key_xyz"},{"name": "英文站", "domain": "www.en-site.com","baidu_token": "", "baidu_quota": 0,"indexnow_key": "key_def"}]def push_baidu(site, urls):if not site["baidu_token"] or site["baidu_quota"] <= 0:returnapi = f"http://data.zz.baidu.com/urls?site={site['domain']}&token={site['baidu_token']}"push_urls = urls[:site["baidu_quota"]]for i in range(0, len(push_urls), 2000):batch = push_urls[i:i+2000]data = "".join(batch)r = requests.post(api, headers={"Content-Type": "text/plain"}, data=data)print(f"{site['name']} 百度: {r.json()}")time.sleep(1)def push_indexnow(site, urls):if not site.get("indexnow_key"): returnpayload = {"host": site["domain"], "key": site["indexnow_key"],"keyLocation": f"https://{site['domain']}/{site['indexnow_key']}.txt","urlList": urls[:10000]}r = requests.post("https://api.indexnow.org/IndexNow", json=payload)print(f"{site['name']} IndexNow: HTTP {r.status_code}")for site in SITES:new_urls = ["https://"+site["domain"]+"/p-"+str(i) for i in range(1,51)]push_baidu(site, new_urls)push_indexnow(site, new_urls)实际建议:多站点管理时,用UC建站系统的多站看板统一监控功能可以避免逐一登录各站后台的麻烦。看板上一眼看到每个站的索引量变化、推送状态和异常预警,不需要每天打开十几个站长平台页面手动检查。配合系统的双通道推送机制(百度API + IndexNow),内容发布后自动触发推送,省掉了手工写脚本、维护token的环节。
七、容易踩的三个坑,搞错了推送等于白做
坑一:重复推送已收录的URL
百度API有去重逻辑,但配额有限的情况下,每天把3000条URL全推一遍,其中2800条早就收录了——浪费的不只是配额,是当天新页面本该被推送的机会。做增量推送,只推新URL。
坑二:token泄露导致配额被刷
百度推送token写在JS代码里或者前端页面源码中,被别人抓取后疯狂调用,配额几秒钟就没了。token只能放在服务端代码中,前端永远不要暴露。
坑三:IndexNow Key文件访问不到
Key文件放到了服务器上但URL返回404或403,推送就无效。放好后用浏览器直接访问确认能打开,内容就是Key字符串。WordPress用户建议直接用官方插件自动处理。
还有一个容易被忽视的问题:推送了不等于收录了。百度API推送只是把URL加入爬虫队列,如果页面内容质量差、加载速度慢、或者被识别为低质内容,爬虫来了也不一定收录。推送解决的是"被发现"的问题,不是"被收录"的问题。
推送后怎么看效果?百度看站长平台的"索引量"变化和"抓取频次"曲线;Bing看Bing Webmaster Tools的"URL Submission"记录;Google看Search Console的"覆盖率"报告。推送不是终点,索引状态才是。
八、不同场景下的通道组合策略
实际运营中,没有人会只用一条通道。根据站点类型和流量来源,推荐的组合策略如下:
| 站点类型 | 推荐组合 | 原因 |
|---|---|---|
| 纯中文站 | 百度API推送 + sitemap | 流量主要来自百度,IndexNow和Google Indexing API基本没用 |
| 外贸独立站 | IndexNow + sitemap | 目标市场用Google和Bing,Google没有通用推送API,靠sitemap;Bing用IndexNow加速 |
| 中英文双站 | 百度API + IndexNow + sitemap | 国内站推百度,海外站推IndexNow,sitemap兜底 |
| 招聘/活动站 | Google Indexing API + 百度API + sitemap | 唯一能用Google Indexing API的场景,配合其他通道全覆盖 |
| 多站点站群 | 双通道自动推送 + 统一看板 | 手动管理token和配额不现实,需要系统化方案 |
多站点站群的推送管理,靠手工写Python脚本维护十几个站点的token、配额、推送日志,很容易出纰漏。UC建站系统把百度API推送和IndexNow做成了内容发布后的自动触发环节——文章一发出去,系统自动判断该站配置了哪些推送通道,按配额规则分批推送,推送结果记入多站看板。不需要每个站单独维护脚本,也不需要手动查每个站的剩余配额。对于同时跑着五六个站的人来说,这个"自动挡"比手工"手动挡"省的不只是时间,是出错概率。
说穿了,主动推送这件事没有太多神秘的地方。四个通道搞清楚各自的覆盖范围、配额限制和适用场景,选对组合,配上自动化,新页面从发布到被爬虫发现的时间能从天级压缩到小时级甚至分钟级。剩下的——内容质量能不能让搜索引擎决定收录——那是另一个话题了。
