织梦必应推送接口配置文件
问题背景
必应(Bing)从 2021 年起全面采用 IndexNow 协议接收主动推送,相比传统的 sitemap 提交,IndexNow 能让新页面在数分钟内被必应发现并抓取,对织梦 DedeCMS 这类信息发布型站点来说,是提升必应收录效率的重要手段。但织梦官方未内置 IndexNow 推送逻辑,需要自行开发配置文件。
原因分析
IndexNow 协议特点
IndexNow 是一个由 Microsoft、Yandex、Seznam 联合推出的开放协议,核心机制:站点生成一个 key,把 key 文件放在站点根目录,然后向搜索引擎提交 URL+key 即可完成推送。一次推送,多搜索引擎共享。
为什么要主动推送
必应蜘蛛的天然抓取频率低于百度,新发布文章若不主动推送,可能数天甚至数周才被发现,错过内容时效性窗口。
解决步骤
一、生成 API key
访问 https://www.bing.com/indexnow,生成一个 32 位十六进制字符串作为 key,例如 1a2b3c4d5e6f7890abcdef1234567890。
二、在站点根目录放置 key 文件
新建 /{key}.txt,内容就是 key 本身:
1a2b3c4d5e6f7890abcdef1234567890
确保 https://www.example.com/1a2b3c4d5e6f7890abcdef1234567890.txt 可访问。
三、编写推送类文件
在 /include/ 下新建 bingpush.class.php:
<?php
class BingIndexNow {
private $key='1a2b3c4d5e6f7890abcdef1234567890';
private $endpoint='https://api.indexnow.org/indexnow';
public function push($urls){
if(!is_array($urls)) $urls=array($urls);
$host=$_SERVER['HTTP_HOST'] ?? 'www.example.com';
$payload=array(
'host'=> $host,
'key'=> $this->key,
'keyLocation'=> 'https://'.$host.'/'.$this->key.'.txt',
'urlList'=> $urls
);
$ch=curl_init($this->endpoint);
curl_setopt_array($ch, array(
CURLOPT_POST=> true,
CURLOPT_HTTPHEADER=> array('Content-Type: application/json; charset=utf-8'),
CURLOPT_POSTFIELDS=> json_encode($payload),
CURLOPT_RETURNTRANSFER=> true,
CURLOPT_TIMEOUT=> 10,
CURLOPT_SSL_VERIFYPEER=> false
));
$resp=curl_exec($ch);
$code=curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array('code'=>$code, 'body'=>$resp);
}
}
四、文章发布时调用
修改 /dede/archives_add.php,在文章入库成功后追加:
require_once(DEDEINC.'/bingpush.class.php');
$push=new BingIndexNow();
$arcurl='https://www.example.com'.$artUrl;
$push->push(array($arcurl));
五、批量补推历史文章
写一个临时脚本 /dede/bingpush_all.php,遍历 archives 表,把未推送的文章 URL 推送一遍:
$dsql->SetQuery("SELECT id, typeid FROM dede_archives WHERE arcrank>-1");
$dsql->Execute();
while($row=$dsql->GetArray()){
$url='https://www.example.com/'.GetFileUrl($row['id'],$row['typeid']);
$urls[]=$url;
if(count($urls)>=10000){ // IndexNow 单次上限 10000
$push->push($urls); $urls=array();
sleep(1);
}
}
配置示例汇总
注意事项
- 同一 URL 重复推送不会扣分,但浪费配额,建议加去重日志表。
- 推送 URL 必须是完整的 https 链接,且与站点 host 一致。
- key 文件 HTTP 状态必须是 200,不能 301/302,否则验证失败。
- IndexNow 还会自动同步到 Yandex、Seznam、Naver,多语种站点收益明显。
- 必应站长后台可查看 IndexNow 推送统计,作为效果评估依据。
实施建议
建议把 IndexNow 推送与百度推送、360 推送、搜狗推送整合到一个统一的 push 任务调度器中,文章发布时一次性多通道推送。同时把推送结果写入日志表,每日统计成功率,作为站点内容分发健康度指标。后续可以观察必应收录曲线,确认推送与收录的转化率,反推内容质量评分,让推送策略持续优化。