IndexNow 与 Sitemap 协同:让搜索引擎几分钟内收录新文章

IndexNow 与 Sitemap 协同:让搜索引擎几分钟内收录新文章

admin
2026-11-02 / 0 评论 / 2 阅读 / 约 9 分钟 / 正在检测是否收录...

为什么需要 IndexNow 与 Sitemap 协同

传统收录流程依赖搜索引擎爬虫按计划抓取 sitemap,新文章从发布到被 Bing 等引擎发现往往需要数小时甚至数天。IndexNow 协议允许站点主动推送 URL 变更,将这一过程缩短到几分钟。但 IndexNow 并非替代 sitemap,二者分工明确:sitemap 负责全量、结构化的 URL 清单,IndexNow 负责增量、实时的变更通知。

核心原则:sitemap 保证“不漏”,IndexNow 保证“不慢”。

IndexNow 协议原理

IndexNow 是一个开放协议,由微软 Bing 等搜索引擎联合推动。站点通过 HTTPS POST 请求向 IndexNow 端点提交 URL,端点将变更分发给参与的搜索引擎。协议本身不存储页面内容,只传递“哪些 URL 发生了变更”这一信号。

  • 提交方式:单个 URL 或 URL 列表(JSON 格式)。
  • 认证机制:基于密钥文件,证明站点所有权。
  • 响应:HTTP 状态码表示接受、拒绝或错误。
  • 分发范围:目前主要被 Bing、Yandex、Seznam 等采用,Google 尚未加入。

密钥文件部署

使用 IndexNow 前,需在站点根目录放置一个 UTF-8 文本文件,文件名为 {密钥}.txt,内容与文件名中的密钥一致。密钥为 8-128 位字母数字字符串。

例如密钥为 a1b2c3d4e5f6,则创建文件 https://example.com/a1b2c3d4e5f6.txt,内容为:

a1b2c3d4e5f6

部署后可通过浏览器直接访问该 URL 验证。若返回 404 或内容不匹配,提交将失败。

API 调用与返回码含义

IndexNow 端点统一为 https://api.indexnow.org/indexnow,也支持各搜索引擎独立端点(如 Bing 的 https://www.bing.com/indexnow)。推荐使用统一端点,由协议层自动分发。

请求格式

支持两种方式:

  1. 提交单个 URL:GET 或 POST,参数包含 url、key、keyLocation。
  2. 提交 URL 列表:POST JSON,包含 host、key、keyLocation、urlList。
{
  "host": "example.com",
  "key": "a1b2c3d4e5f6",
  "keyLocation": "https://example.com/a1b2c3d4e5f6.txt",
  "urlList": [
    "https://example.com/new-article-1",
    "https://example.com/new-article-2"
  ]
}

返回码解读

状态码含义处理建议
200成功接受无需操作
202已接受,待验证检查密钥文件可访问性
400请求格式错误检查 JSON 字段与 URL 格式
403密钥无效或未找到确认密钥文件路径与内容
422URL 不属于该 host 或密钥不匹配核对 host 与 urlList 域名
429请求过于频繁降低提交频率,加入重试退避
注意:200 仅表示端点已接受请求,不保证搜索引擎一定收录。收录仍取决于内容质量与站点权重。

IndexNow 与 Sitemap 的分工

维度IndexNowSitemap
目的实时通知 URL 变更全量声明站点 URL
时效分钟级小时到天级
覆盖范围增量、单次提交全站、结构化
支持引擎Bing、Yandex 等几乎所有搜索引擎
认证方式密钥文件无(依赖 robots.txt 声明)
适用场景新文章、更新、删除全站索引、历史内容

最佳实践:保持 sitemap 自动更新并提交到 Bing 等站长平台,同时在新文章发布或旧文章更新时调用 IndexNow 推送变更 URL。二者结合,既保证全量覆盖,又实现快速收录。

PHP 实现代码

以下代码演示如何通过 cURL 向 IndexNow 提交 URL 列表,并处理返回码。

<?php
function submitIndexNow(array $urls, string $host, string $key, string $keyLocation): array
{
    $endpoint = 'https://api.indexnow.org/indexnow';
    $payload = json_encode([
        'host' => $host,
        'key' => $key,
        'keyLocation' => $keyLocation,
        'urlList' => $urls,
    ], JSON_UNESCAPED_SLASHES);

    $ch = curl_init($endpoint);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_HTTPHEADER => ['Content-Type: application/json; charset=utf-8'],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);

    return [
        'http_code' => $httpCode,
        'response' => $response,
        'error' => $error,
    ];
}

// 示例调用
$result = submitIndexNow(
    ['https://example.com/new-article-1', 'https://example.com/new-article-2'],
    'example.com',
    'a1b2c3d4e5f6',
    'https://example.com/a1b2c3d4e5f6.txt'
);

if ($result['http_code'] === 200 || $result['http_code'] === 202) {
    echo '提交成功';
} else {
    error_log('IndexNow 提交失败: ' . $result['http_code'] . ' ' . $result['error']);
}

排错清单

  • 密钥文件无法访问:检查文件是否位于站点根目录,是否被防火墙或重写规则拦截。
  • 返回 403:确认密钥文件名与内容一致,且为 UTF-8 无 BOM 格式。
  • 返回 422:检查 host 是否与 URL 域名完全匹配,urlList 中每个 URL 是否属于该 host。
  • 提交后未收录:IndexNow 只通知变更,不保证收录。需结合内容质量、内链、sitemap 综合优化。
  • 频率限制:避免短时间内大量重复提交,建议对同一 URL 设置最小提交间隔(如 10 分钟)。
  • 日志记录:记录每次提交的 URL、返回码与时间,便于回溯。

常见问题

IndexNow 能替代 sitemap 吗?

不能。IndexNow 是增量通知协议,不提供全量 URL 清单。sitemap 仍是搜索引擎发现站点结构的基础。二者应同时使用。

IndexNow 支持 Google 吗?

截至当前,Google 未加入 IndexNow。Google 依赖 sitemap、内链和 Search Console 提交。IndexNow 主要影响 Bing、Yandex 等引擎。

提交后多久能被收录?

若站点质量良好,Bing 通常在几分钟到几小时内抓取并更新索引。但收录速度受站点权重、内容质量、服务器响应等因素影响,IndexNow 只缩短发现时间。

删除文章需要提交 IndexNow 吗?

需要。当文章被删除或返回 404/410 时,应通过 IndexNow 提交该 URL,通知搜索引擎移除索引。同时更新 sitemap 移除该 URL。

0

评论 (0)

取消