关于IndexNow
IndexNow是一个易于使用的协议,当任何URL上的网站内容更新或被创建时,网站都可以调用该协议来通知Bing,帮助URL更快的为Bing所发现。
准备工作
首先你需要一个API密钥来匹配域的所有权以及提交的URL;必应会自动为你生成,你可以在以下站点下载主动生成的密钥的txt文件:
将下载好的txt文件托管在站点的根目录上,这将有助于验证提交的URL的所有权;
网站管理员可以提交单个或批量URL,只需将您的密钥位置作为URL参数提交即可,向Bing提交的和Bing发现的URL可以在Bing网站管理员工具门户中看到(需要登录);
验证站点
上传文件到服务器之后,通过类似“站点名/文件名(含后缀)”的形式访问,看看文件是否能够正常被显示:
//简单示例
https://www.example.com/6b8e36ee393f45bcaf3a0f6183a2d1a3.txt
单条网址提交
示例如下,“?”前面的内容是固定的,“url=”之后需要填写需要提交的实际页面的地址,“key=”后面则提交刚才下载好的API密钥的值:
//简单示例
https://www.bing.com/indexnow?url=http://www.example.com/product.html&key=6b8e36ee393f45bcaf3a0f6183a2d1a3
组建好链接之后,后续提交不同的地址时,只需要修改“url=”之后的url地址就可以了。
对多条网址提交的尝试
之前向百度批量推送过网址,百度的日推送限额是3000条,而在Bing站点管理平台中,IndexNow的限额是1000条。尝试修改了一下百度推送程序,先贴一下完整的程序,该程序是一个页面模板,适用于typecho,在后台创建一个新页面,指定模板为“BING推送页”,保存后访问一下新页面就会执行:
<?php
/**
* BING推送页
*
* @package custom
*/
$db = Typecho_Db::get();
$options = Typecho_Widget::widget('Widget_Options');
$limit = 100;
$articles = $db->fetchAll(
$db->select()->from('table.contents')
->where('table.contents.status = ?', 'publish')
->where('table.contents.created < ?', $options->gmtTime)
->where('table.contents.type = ?', 'post')
->limit($limit)
->order('table.contents.created', Typecho_Db::SORT_DESC)
);
$push_urls=[];
foreach ($articles as $article) {
$type = $article['type'];
$routeExists = (NULL != Typecho_Router::get($type));
$article['pathinfo'] = $routeExists ? Typecho_Router::url($type, $article) : '#';
$article['permalink'] = Typecho_Common::url($article['pathinfo'], $options->index);
array_push($push_urls,$article['permalink']);
}
$urls=[
'host' => 'www.abddb.com',
'key' => 'yourKey',
'keyLocation' => 'https://www.abddb.com/yourKey.txt',
'urlList' => $push_urls
];
$api = 'https://api.indexnow.org/indexnow/';
//$api = 'https://api.indexnow.org/IndexNow/';
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode($urls),
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Content-Type: application/json"
),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
博主水平有限,程序执行后没能从服务器获得任何反馈,登陆站点平台看了一下,成功提交的链接数量仅有“10”条,不知道是由于Bing网站规则修改的原因,或是程序还有一些bug,连续测试了两天,都是能提交但且只能提交10条地址,如果是平台限制的话,那这个数量的推送比手动也快不了多少。