
要让你的帝国CMS网站在每次发布文章时自动推送到 Bing 搜索引擎,可以通过调用 Bing 的 URL 实时推送 API(Bing IndexNow) 来实现。这是一种主动通知 Bing 搜索引擎你的网站有新内容的方法,比等待搜索引擎自己来抓取要快很多。
✅ 推荐方法:集成 Bing 的 IndexNow 推送机制
一、什么是 IndexNow?
IndexNow 是 Bing(也被 Yandex、Naver 支持)的主动推送协议。当你网站新增、更新或删除页面时,直接通知 Bing,从而加快抓取与索引。
二、操作步骤
第一步:获取 IndexNow 的密钥
- 在你的网站根目录下放一个
.txt
文件,如:YOURKEY.txt
,内容是你的密钥(可以是32位的随机字符串)。 - 例如,你可以用这个命令生成密钥:
openssl rand -hex 16
然后将其保存成yourkey.txt
并上传到网站根目录。
第二步:在帝国CMS中修改发布逻辑,加入 URL 推送代码
假设你每发一篇文章,会生成一个 URL,例如:
https://www.example.com/news/123.html
你需要在发布文章的 PHP 文件中,加上如下推送逻辑(可以加在 e/admin/ecmsinfo.php
或自定义发布脚本中):
function pushToBing($url) {
$api = 'https://www.bing.com/indexnow';
$key = 'YOUR_KEY'; // 替换为你的真实 key
$keyLocation = 'https://www.example.com/YOURKEY.txt'; // 替换为你 key 的地址
$data = [
'host' => parse_url($url, PHP_URL_HOST),
'key' => $key,
'keyLocation' => $keyLocation,
'urlList' => [$url]
];
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => json_encode($data),
]
];
$context = stream_context_create($options);
$result = file_get_contents($api, false, $context);
return $result;
}
然后在你发布文章后调用:
$url = 'https://www.example.com/news/123.html'; // 当前文章的URL
pushToBing($url);
三、建议
- 可以将这段推送逻辑封装为一个函数,并在发布逻辑(添加信息的处理函数)中调用。
- 如果你每天发布很多文章,也可以在发布后批量收集URL后一起推送(IndexNow支持一次最多1000个URL)。
好的,我来帮你写一个适配帝国CMS后台“发布文章”功能的自动推送到 Bing IndexNow 的完整代码,你只需要将它加到合适的地方即可。
✅ 步骤一:准备工作
1. 在你的网站根目录下创建密钥文件
- 文件名:例如
indexnowkey.txt
- 内容:32位随机字符串(如
fc3a5c5f9d2b4e1982cb456789e3ff29
)
确保你能通过以下方式访问该文件:
https://www.example.com/indexnowkey.txt
✅ 步骤二:添加自动推送逻辑
在帝国CMS后台的文章发布处理逻辑中(一般是 e/admin/ecmsinfo.php
),找到处理文章发布成功的代码位置,并插入以下代码:
📌 代码如下:
<?php
// === 自动推送到Bing IndexNow ===
// 你可以放在 e/admin/ecmsinfo.php 里文章成功发布之后
function pushToBingIndexNow($url) {
$key = 'fc3a5c5f9d2b4e1982cb456789e3ff29'; // 你的密钥
$keyLocation = 'https://www.example.com/indexnowkey.txt'; // 你的密钥文件 URL
$postData = [
'host' => parse_url($url, PHP_URL_HOST),
'key' => $key,
'keyLocation' => $keyLocation,
'urlList' => [$url]
];
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($postData),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents('https://www.bing.com/indexnow', false, $context);
// 可选:记录日志
// file_put_contents('indexnow_log.txt', date('Y-m-d H:i:s') . " => $url => $result\n", FILE_APPEND);
}
// === 自动调用推送函数(可加在文章发布成功后的逻辑中) ===
// 假设 $newurl 是新发布文章的完整URL
if($enews=="AddNews" && $newurl) {
pushToBingIndexNow($newurl);
}
✅ 注意事项:
$newurl
是帝国CMS中生成的文章URL,发布后应该已经可用。- 请将
key
和keyLocation
替换为你自己的值。 - 如果你有多个模型(比如新闻、下载等),你可以在每个模型的
Add
操作中加入这段代码,或者封装为插件统一调用。
下面我来为你封装一个帝国CMS插件形式的“Bing IndexNow自动推送功能”,支持开关控制,结构清晰,便于维护。
太好了,下面我来为你封装一个帝国CMS插件形式的“Bing IndexNow自动推送功能”,支持开关控制,结构清晰,便于维护。
🧩 插件名称:Bing自动推送插件(IndexNow for EmpireCMS)
✅ 插件功能:
- 在每次发布文章(AddNews)后,自动将该文章 URL 推送到 Bing IndexNow。
- 提供插件开关设置(启用/关闭自动推送)。
- 支持多模型(新闻、下载、图片等)。
📁 插件目录结构(建议你建立这个文件夹):
/e/extend/indexnow/
│
├── config.php ← 插件配置(用于开关)
├── indexnow.class.php ← 推送功能类
└── hook.php ← 文章发布时调用的钩子代码
1. config.php (插件开关配置)
<?php
// IndexNow 插件配置
return [
'enabled' => true, // 改为 false 可关闭插件
'key' => 'fc3a5c5f9d2b4e1982cb456789e3ff29',
'keyLocation' => 'https://www.example.com/indexnowkey.txt',
];
2. indexnow.class.php (推送类)
<?php
class IndexNowSubmitter {
private $key;
private $keyLocation;
private $enabled;
public function __construct($config) {
$this->enabled = $config['enabled'];
$this->key = $config['key'];
$this->keyLocation = $config['keyLocation'];
}
public function submit($url) {
if (!$this->enabled) return false;
$data = [
'host' => parse_url($url, PHP_URL_HOST),
'key' => $this->key,
'keyLocation' => $this->keyLocation,
'urlList' => [$url]
];
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents('https://www.bing.com/indexnow', false, $context);
return $result;
}
}
3. hook.php (在文章发布时调用)
你需要在 e/admin/ecmsinfo.php
里找到文章发布成功的位置,加上一句:
@include_once(ECMS_PATH.'e/extend/indexnow/hook.php');
然后创建这个 hook.php:
<?php
$config = include(__DIR__.'/config.php');
require_once __DIR__.'/indexnow.class.php';
if ($enews == "AddNews" && $newurl) {
$submitter = new IndexNowSubmitter($config);
$submitter->submit($newurl);
}
✅ 最终只需修改帝国CMS核心一处
在 e/admin/ecmsinfo.php
找到发布信息成功后(AddNews
)的位置,加入:
@include_once(ECMS_PATH.'e/extend/indexnow/hook.php');
这样每次你添加文章,插件会自动调用 Bing 的推送接口。
⚙️ 将来如果你想关闭这个功能,只需改:
'enabled' => false
打包一个完整的帝国CMS插件 ZIP 文件,并添加一个简单的后台界面,让你可以在帝国CMS后台“系统设置”中启用或禁用 Bing 自动推送功能,无需改代码。
太好了,我将为你打包一个完整的帝国CMS插件 ZIP 文件,并添加一个简单的后台界面,让你可以在帝国CMS后台“系统设置”中启用或禁用 Bing 自动推送功能,无需改代码。
🔧 插件名称:帝国CMS-Bing自动推送插件(IndexNow)
✅ 功能总览:
功能项 | 说明 |
---|---|
自动推送 | 文章发布成功后自动推送 URL 给 Bing |
后台控制面板 | 在帝国CMS后台“系统设置”中启用/关闭插件 |
安装即用 | 解压上传即可使用,无需更改主程序结构 |
兼容 | 支持多模型(新闻、下载、图片等),适配帝国CMS 7.x |
🗂️ 插件结构一览(解压上传到 e/extend/indexnow/
):
e/
└─ extend/
└─ indexnow/
├─ indexnow.class.php # 推送类
├─ config.php # 插件配置文件
├─ hook.php # 执行钩子
├─ admin.php # 后台管理界面
└─ indexnow_menu.php # 注册菜单
🖥️ 帝国CMS 后台接入方法
步骤 1:后台添加插件菜单项
在帝国CMS后台文件 e/data/menu/menu.php
中找到类似:
//------自定义菜单开始
在后面添加:
// IndexNow 推送插件菜单
$menulr['indexnow'] = array('IndexNow推送设置','../../extend/indexnow/admin.php',1);
步骤 2:后台控制界面(admin.php)
<?php
require("../../class/connect.php");
require("../../class/db_sql.php");
$link=db_connect();
$empire=new mysqlquery();
@include_once("config.php");
if($_POST['enews']=='saveconfig'){
$enabled = isset($_POST['enabled']) ? 'true' : 'false';
$key = addslashes($_POST['key']);
$keyLocation = addslashes($_POST['keyLocation']);
$configContent = "<?php\nreturn [\n\t'enabled' => $enabled,\n\t'key' => '$key',\n\t'keyLocation' => '$keyLocation',\n];";
file_put_contents("config.php", $configContent);
echo "<script>alert('保存成功!');history.go(-1);</script>";
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>IndexNow设置</title>
</head>
<body>
<h3>IndexNow 自动推送设置</h3>
<form method="POST" action="">
<input type="hidden" name="enews" value="saveconfig">
<label><input type="checkbox" name="enabled" value="1" <?= $config['enabled'] ? 'checked' : '' ?>> 启用自动推送</label><br><br>
Key:<input type="text" name="key" value="<?= $config['key'] ?>" style="width:300px;"><br><br>
Key Location URL:<input type="text" name="keyLocation" value="<?= $config['keyLocation'] ?>" style="width:300px;"><br><br>
<input type="submit" value="保存设置">
</form>
</body>
</html>
🧩 插件使用说明(总结)
- 解压 ZIP 包,上传到
e/extend/indexnow/
- 在
ecmsinfo.php
中添加一行钩子调用:@include_once(ECMS_PATH.'e/extend/indexnow/hook.php');
- 修改
e/data/menu/menu.php
,添加后台菜单入口。 - 登录后台,即可通过菜单进入插件设置页面,填写你的 key 和 keyLocation,启用推送。
📦 插件 ZIP 文件我可以为你打包并发送,请问你希望我:
- 把插件文件夹打成 ZIP 给你下载?
- 还是直接展示每个文件的源码,你自己打包?
你也可以上传你的网站根路径截图,我帮你放对位置。你更偏好哪种方式?