海洋 CMS IndexNow 链接自动提交怎么配置

域名注册
域名注册 正式会员超兽战士 👑年卡会员
发布于 2026-10-08 11:24 ·2 浏览 ·0 回复

结论:海洋CMS 没有内置的 IndexNow 提交开关,自动提交要靠两步自己搭——把 key 文件放到网站根目录完成验证,再用一个 PHP 脚本配合计划任务,把最近更新的文章 URL POST 到 https://api.indexnow.org/indexnow。全程不需要插件,20 分钟能配完。

IndexNow 是什么,和百度/谷歌的推送有什么区别?

IndexNow 是一套由微软 Bing 和 Yandex 在 2021 年联合发起的「URL 变更即时通知」协议,后来 Naver、Seznam 也接入,你提交一次,接入该协议的搜索引擎会同时收到。它和百度普通收录推送最大的不同是:**不需要在每家搜索引擎单独注册 token,只用一个 key 文件验证站点归属即可,所有支持 IndexNow 的引擎共用这一个 key。**

对做内容站的海洋CMS 用户来说,实际收益主要在 Bing 侧:Bing 明确支持 IndexNow,且国内不少浏览器、Copilot 等场景的搜索数据来自 Bing;同时 Yandex 也吃这套通知。注意 IndexNow 只负责「通知我更新了」,不承诺收录必须变,收录与否仍取决于内容质量和站点权重。

IndexNow 的 key 文件怎么放置和验证?

结论:key 必须满足 8–128 位、只能由大小写字母、数字和短横线 - 组成,并且要把「文件名就是 key 本身」的 txt 文件放到网站根目录,能通过 https://你的域名/你的key.txt 直接访问。

具体三步:

  1. 生成 key。直接用 32 位随机字符串即可,例如 a1b2c3d4e5f6789012345678abcdef90(用密码管理器生成,别用 12345678 这种)。
  2. 建文件 <key>.txt,文件内容就是这串 key 本身,不要加换行以外的任何字符,不要写 JSON。
  3. 上传到网站根目录(海洋CMS 一般就是 index.php 所在目录),浏览器访问 https://www.example.com/<key>.txt,能看到那串字符就算通过。

验证失败最常见的两个原因:一是文件放到了子目录,路径对不上;二是 Nginx/Apache 把 .txt 做了防盗链或强制跳转,导致返回 403 或 301。用 curl -I https://www.example.com/<key>.txt 看一眼状态码是不是 200。

海洋CMS 怎么做到发布后自动提交?

结论:靠一个读数据库的 PHP 脚本 + 服务器 crontab 定时跑,比改发布流程更省事,也不会因为采集量太大把提交接口打爆。

脚本逻辑就三件事:查出最近 N 天更新的文章 → 拼成完整 URL 数组 → POST 给 IndexNow。

<?php
$key  = 'a1b2c3d4e5f6789012345678abcdef90';
$host = 'www.example.com';                       // 不带 http://
$keyLocation = 'https://' . $host . '/' . $key . '.txt';

// 表名、字段名按你站点的实际结构替换(海洋CMS 默认表前缀为 sea_)
$pdo = new PDO('mysql:host=localhost;dbname=你的库;charset=utf8', '用户', '密码');
$sql = "SELECT id FROM sea_archives
        WHERE pubdate > UNIX_TIMESTAMP() - 3*86400
        ORDER BY pubdate DESC LIMIT 5000";
$urls = [];
foreach ($pdo->query($sql) as $row) {
    $urls[] = 'https://' . $host . '/show/' . $row['id'] . '.html';  // 按你的伪静态规则拼
}
if (!$urls) exit;

$payload = [
    'host'        => $host,
    'key'         => $key,
    'keyLocation' => $keyLocation,
    'urlList'     => $urls,
];
$ch = curl_init('https://api.indexnow.org/indexnow');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload, JSON_UNESCAPED_SLASHES),
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json; charset=utf-8'],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 15,
]);
curl_exec($ch);
file_put_contents('indexnow.log', date('c') . ' ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . "\n", FILE_APPEND);
curl_close($ch);

然后加计划任务,比如每天凌晨 3 点跑一次:0 3 * * * /usr/bin/php /www/wwwroot/站点/indexnow.php。如果你用海洋CMS 自带的采集功能批量入库,建议把提交放在采集任务结束后触发,而不是每篇文章都发一次请求。

**限制要记牢:单次请求 urlList 最多 10000 条,同一个站点的 URL 一天别重复提交超过 10000 条,同一篇文章更新后 24 小时内重复推送意义不大。**

提交后返回 403 / 422 / 429 怎么办?

结论:这三个状态码分别对应 key 验证失败、URL 与站点不匹配、提交频率过高,对照处理即可。

  • 403:key 文件 404、内容与提交的 key 不一致,或站点有防火墙拦截了 IndexNow 的抓取 UA。先确认 <key>.txt 返回 200。
  • 422:urlList 里的 URL 和 host 字段域名对不上(比如 www 和非 www 混用),或协议不一致。统一规范成一种,例如全用 https://www.example.com。
  • 429:短时间提交太多。把脚本改成按天分批,或者只推最近 24 小时的新内容。
  • 200 / 202:200 表示已接收;202 表示 key 还在验证中,等几小时即可。

哪些 URL 不要提交

结论:只推「内容有实质变化的页面」,别把列表页、标签页、搜索结果页全推一遍。

值得推的是文章详情页和栏目主页;不值得推的是 ?page=2 这类分页、站内搜索结果页、后台路径、以及被 robots.txt 屏蔽的地址。海洋CMS 站点通常有大量标签聚合页,如果这些页面内容重复度高,推过去只会拉低整站信任度。另外,如果站点开了 HTTPS 强制跳转,提交时必须用 https:// 开头的最终地址。

配好之后,日常只需要看一眼 indexnow.log 里的状态码是否稳定在 200/202,剩下的交给计划任务就行。

版权声明:本文来自 GJ站长论坛《海洋 CMS IndexNow 链接自动提交怎么配置》
原文链接:https://www.gj0.com/thread-926.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~