发布接入文档设置发布连接开发接入说明

把 RankOps AI 文章发布到你自己的网站

RankOps AI 负责生成和审核文章;你只需要在网站接入里保存发布地址和安全 key,让审核后的文章可以发送到你的网站。

一、发布链路是怎么走的

  ① 在 RankOps AI 这一侧                ② 你的网站
  ─────────────────────                ─────────────────────────────────
  发现关键词机会
  生成文章
  审核并通过
  发送已审核文章            ─────►    接收文章
                                       保存文章
  记录文章链接              ◄─────    返回文章链接

箭头左边的事情都在 RankOps AI 完成。你的网站只需要接收文章、返回上线 URL。

二、先准备这两件事

你只需要准备一个能接收文章的地址,然后回到 RankOps AI 保存发布连接。

准备网站接收地址

让负责你网站的开发者提供一个 HTTPS 接收地址,用来接收 RankOps AI 发来的文章。

保存发布连接

在 RankOps AI 的网站接入里填写 Publish URL 和 Security key,然后点击测试连接。

三、网站接收地址

适合谁看:负责给你的网站增加接收地址的开发者。

你的接收地址通过 HTTP POST 接收一篇已经在 RankOps AI 审核通过的文章。它把文章保存到你网站上,并把上线后的 URL 返回给 RankOps AI,方便我们记录文章发到了哪。

3.1 接口约定

方法和路径你自己定,但请求体格式是固定的。默认建议: POST /api/seo-content/publish

Authorization: Bearer SEO_CONTENT_PUBLISH_TOKEN

3.2 必填字段

sourceArticleIdRankOps AI 里的文章 ID。你的网站必须保存它,并把它作为同一篇文章重复发送时的幂等 key。
title文章标题。在你网站上保存为 post title。
slugURL slug。如果你的网站已经存在同一个 slug,请返回 409。
contentMarkdown 正文。完整保存,不要截断;公开页面展示前必须渲染 Markdown,或先转成安全 HTML。不要让读者看到原始 ## 标题。
language文章语言代码,例如 en 或 zh。
status发布状态。正常发布时传 published。

3.3 可选字段

descriptionSEO meta description。允许空字符串。
authorName作者显示名。
authorImage作者头像 URL。
categories分类名称数组。RankOps AI 会优先使用测试连接时从你的网站同步到的已有分类;如果你的网站没有返回分类列表,RankOps AI 会提示你修复目标站 dryRun 响应并重新获取分类与标签。
tags标签名称数组。RankOps AI 会优先匹配你的网站已有标签;网站允许自动创建标签时,才会补充新的关键词标签。如果你想要可点击的标签聚合页,需要把标签保存到网站原生标签系统,而不是只存成文章字段文本。
dryRuntrue 时只验证 token,返回测试响应,不保存文章。

3.4 请求体示例

{
  "sourceArticleId": "rankops-article-id",
  "title": "Article title",
  "slug": "article-url-slug",
  "description": "Meta description",
  "content": "## Markdown 正文\n\n这里是正文段落,可以包含链接、列表和小标题。",
  "language": "en",
  "authorName": "RankOps AI",
  "authorImage": "https://example.com/avatar.png",
  "categories": ["SEO", "Content Marketing"],
  "tags": ["keyword research", "content strategy"],
  "status": "published"
}

3.5 成功响应示例

{
  "targetPostId": "post-id-from-your-site",
  "publishedUrl": "https://example.com/blog/article-url-slug",
  "status": "published",
  "slug": "article-url-slug"
}

3.6 连接测试(dryRun)

为什么有 dryRun:当用户在 RankOps AI 点击「测试连接」时,我们不想为了验证连接就在你网站上建一篇真文章。所以我们发一个 dryRun 请求。你的接收地址只需要验证安全 key,然后返回 { ok: true, dryRun: true },不要写入任何东西。

测试连接时你的接收地址会收到这个请求体。只验证 token、返回成功,不要保存文章。

{
  "dryRun": true,
  "source": "rankops",
  "purpose": "connection_test"
}

3.7 连接测试成功响应

{
  "ok": true,
  "dryRun": true,
  "settings": {
    "autoCreateCategories": false,
    "autoCreateTags": true
  },
  "taxonomies": {
    "categories": [
      { "title": "Payroll and Benefits", "slug": "payroll" }
    ],
    "tags": [
      { "title": "payroll calculator", "slug": "payroll-calculator" }
    ]
  }
}

3.8 安全清单(必须做)

  • 读取请求体之前,先验证 Authorization: Bearer <token> 请求头。
  • token 只放在服务端环境变量里。不要写进前端代码,也不要提交到 git。
  • 接收地址必须用 HTTPS。RankOps AI 不会调用纯 http 地址。
  • token 不匹配时返回 401,不要返回 200。
  • 如果接收地址公开可访问,加一道基础限流防止滥用。
  • 文章已经保存并公开后,缓存刷新、IndexNow、Webhook、统计等发布后附加任务即使失败,接口仍然必须返回成功。附加任务失败只单独记日志,不能把已写入的文章返回为 500。

四、在 RankOps AI 保存连接

打开 RankOps AI 控制台 → 网站接入 → 选择要发布的网站,按下面对应关系填写:

目标类型       →  选择你的网站接收方式
Publish URL    →  你的网站接收地址
Security key   →  和接收地址里验证的安全 key 完全一致
保存设置       →  点击保存
测试连接       →  点击测试连接,确认连接已验证

点击「测试连接并获取分类与标签」,看到 ✓ 连接已验证 后,RankOps AI 会读取你的网站已有分类和标签。第一次先让文章保持手动发布,手动发送一篇文章检查标题、正文、分类、标签和 slug。

分类和标签不需要在 RankOps AI 手动填写。你的网站应该在测试连接响应里返回已有分类和标签。如果 RankOps AI 提示目标站没有返回分类与标签,请先在目标站创建分类 / 标签,或让开发者在 dryRun 响应里返回 taxonomies,然后回到 RankOps AI 点击「重新获取分类与标签」。

五、上线前测试(按顺序做)

  1. 1测试连接

    在 RankOps AI 网站接入页,点击已保存发布信息旁的「测试连接」按钮。

    成功:你的接收地址能接收请求,且安全 key 一致。
    失败:往下翻到「故障排查」。
  2. 2先手动发布一篇

    在 RankOps AI 生成并审核一篇文章后,先手动触发发布。

    成功:文章出现在你的网站内容列表里。
    失败:在 RankOps AI 打开这篇文章,文章页会显示失败原因。
  3. 3在网站后台检查这篇文章

    打开网站后台里的文章,确认标题、正文、分类、标签和 slug 都正确。

    成功:内容和你在 RankOps AI 审核时一致。
    失败:通常是字段映射问题,看下面「故障排查」。
  4. 4确认后再开启自动处理

    第一篇确认无误后,再按你的需要开启发布计划,或把文章处理方式改成质检通过后自动处理。

    成功:URL 能打开一个公开文章页。
    失败:看下面「故障排查」里的「发布后 404」。

六、故障排查

401 Unauthorized

现象 · 测试连接返回 401,或者文章一直发不到你的网站。

原因 · RankOps AI 里保存的安全 key,和你的网站接收地址读到的 token 对不上。

怎么修 · 重新从你的接收地址环境变量复制 key。粘贴到 RankOps AI → 网站接入 → 安全 key,保存后再点测试连接。

400 Bad Request

现象 · RankOps AI 把文章标为「发布失败」,错误信息含 400。

原因 · 必填字段缺失或格式不对,常见是 title、slug、content、language、status 之一。

怎么修 · 在 RankOps AI 打开这篇文章,确认 Title 和 SEO 元信息都不为空。重新保存后再触发发布。

409 Conflict

现象 · 发布时报错「slug 已存在」。

原因 · 你的网站上已经有一篇文章用了同一个 URL slug。测试连接仍然可能通过,因为 dryRun 只验证连接,不会创建文章,也不会完整验证真实 slug。

怎么修 · 用 sourceArticleId 做幂等处理。如果同一个 sourceArticleId 已经发布过,直接返回已有的 targetPostId、publishedUrl、status 和 slug,不要返回 409。如果这个 slug 属于另一篇文章,再继续返回 409,并在 RankOps AI 里修改新文章 slug 后重发。

429 Too Many Requests

现象 · 发布时报错 too_many_requests。

原因 · 你的网站接收地址做了限流,短时间内收到了多次请求。

怎么修 · 先等几秒后在 RankOps AI 重新发布这篇文章。目标站如果加了基础限流,要允许正常的 RankOps 发布请求通过,并返回 Retry-After 方便判断等待时间。

测试连接通过,但文章没到

现象 · 测试连接显示 ✓ 连接已验证,但实际文章没在你网站上出现。

原因 · 接收地址 dryRun 写对了,但真实发布请求处理失败。常见:正文被裁掉、分类映射报错、写入权限缺失。

怎么修 · 看服务器日志里的失败请求。重点检查正文是否被截断、分类和标签是否能保存、当前账号是否有创建文章权限。

真实发布返回 post_create_failed

现象 · 测试连接和获取分类标签都成功,但手动发布文章时返回 500 或 post_create_failed。

原因 · dryRun 只验证连接、token 和分类标签响应;真实发布还会创建文章、映射分类、匹配或创建标签。常见问题是目标站把分类和标签当成同一种数据结构处理,查询了标签模型里不存在的字段。

怎么修 · 用一篇真实文章做发布测试。分类只按分类模型里真实存在的字段查询,标签只按标签模型里真实存在的字段查询;不要把分类专用字段(例如 rankOpsKey)拿去查 tags。创建失败时返回结构化 error 和安全的 message,方便 RankOps AI 显示具体原因。

文章发布成功但没有分类

现象 · 文章已经出现在目标网站,但没有挂任何分类。

原因 · 通常是目标站没有在测试连接响应里返回分类列表,或者目标站接收地址没有保存 RankOps AI 发来的分类。

怎么修 · 1. 先在目标站确认已经创建分类。2. 让网站开发者在 dryRun 响应里返回 taxonomies.categories,并在真实发布时保存 categories。3. 回到 RankOps AI → 网站接入,点击「重新获取分类与标签」。4. 再手动发布一篇文章检查分类是否自动挂上。5. 已经发布的旧文章,先在目标网站后台补分类。

文章里的 ## 标题直接显示

现象 · 文章发布成功了,但页面里出现 ## Common Problems 这类原始标题,或者整篇正文像一个大段落。

原因 · RankOps AI 发给自建网站的 content 字段是 Markdown。目标站如果把它当普通纯文本直接输出,小标题、列表、链接和段落间距就不会被渲染。

怎么修 · 在文章页渲染 Markdown,或者在保存 / 展示前把 Markdown 转成安全 HTML。至少支持 h2/h3 标题、段落、有序 / 无序列表、链接、引用、代码块和正常换行。改完后手动发布一篇文章,对比公开页和 RankOps AI 文章预览。

发布后 URL 返回 404

现象 · RankOps AI 显示文章已发布,但打开返回的 URL 是 404 页。

原因 · 网站的固定链接缓存还没刷新,或者文章其实还在审核队列里。

怎么修 · 刷新网站固定链接 / 缓存设置。检查文章是不是处于待审核状态,并确认返回的 publishedUrl 是公开文章地址。

目标站已有文章,但 RankOps AI 显示发布失败

现象 · 公开文章已经能打开,但 RankOps AI 仍显示目标站返回 500 或发布失败。

原因 · 目标站先保存了文章,随后缓存刷新、IndexNow、Webhook 等发布后附加任务失败,接收地址错误地把附加任务失败当成了整篇发布失败。

怎么修 · 目标站应在文章保存成功后返回 200/201 和 publishedUrl;发布后附加任务失败只记日志。修复前可在 RankOps AI 文章详情页粘贴真实公开地址并确认已发布,不要重复创建文章。

文章卡在「可发布」状态

现象 · 文章一直停在「可发布」状态,没被发出去。

原因 · 网站接入里的发布连接没配置或没验证通过,或者文章还没被审核通过。

怎么修 · 打开网站接入,确认看到 ✓ 连接已验证。打开这篇文章并点击通过审核。在文章详情页手动触发一次发布。

七、给 AI 编程助手的提示词进阶

把下面这段复制给负责你网站的开发者,或者复制到 Cursor、Claude Code、Codex 等 AI 编程工具,让它在你的网站项目里一次性把接收地址和测试都写好。

请在我的网站项目里新增一个 SEO 内容接收地址。

目标:接收 RankOps AI 发来的已审核文章,并在我自己的网站创建文章。

接收地址要求:
1. 新增 POST /api/seo-content/publish。这个路径只是示例,可以替换成 /api/rankops/publish 或你项目里的其他路径。
2. 从请求头读取 Authorization: Bearer <SEO_CONTENT_PUBLISH_TOKEN>。
3. token 不一致时,在读取请求体或写入文章之前返回 401。
4. 如果请求体是 { dryRun: true, source: "rankops", purpose: "connection_test" },只验证 token,不保存文章,并返回 { ok: true, dryRun: true, settings: { autoCreateCategories: false, autoCreateTags: true }, taxonomies: { categories: [{ title: "Payroll and Benefits", slug: "payroll" }], tags: [{ title: "payroll calculator", slug: "payroll-calculator" }] } }。
5. 普通发布请求读取 JSON 字段:sourceArticleId、title、slug、description、content、language、authorName、authorImage、categories、tags、status。
6. 必填:sourceArticleId、title、slug、content、language、status。description、authorName、authorImage、categories、tags 是可选字段。正常发布时 status 传 published。
7. content 是 Markdown 正文。完整保存,不要截断;文章页要渲染 Markdown,或者在保存 / 展示前转成安全 HTML。至少支持 h2/h3 标题、段落、有序 / 无序列表、链接、引用、代码块和正常换行;不要把原始 ## 标题展示给读者。
8. 保存 sourceArticleId,并把它作为幂等 key。如果同一个 sourceArticleId 已经接收过,返回已有的 targetPostId、publishedUrl、status 和 slug,不要重复创建,也不要返回 409。
9. 如果 slug 已存在,但属于另一篇文章,或者无法确认 sourceArticleId,返回 409 并说明 slug 已存在。
10. 把文章保存到网站内容系统里。如果网站支持分类,要把 categories 映射到已有分类 ID;如果不希望分类库变乱,autoCreateCategories 保持 false。
11. 如果网站支持可点击标签聚合页,把 tags 保存到原生标签表或标签模型,并让文章页标签链接到对应标签聚合页;不要只把 tags 存成一段普通文本。如果允许自动创建标签,autoCreateTags 可以返回 true。分类和标签要按各自模型/schema 查询;不要把分类专用字段(例如 rankOpsKey)拿去查标签。
12. status 是 published 时,publishedUrl 必须是可公开访问的 HTTPS 地址。
13. token 只保留在服务端,用环境变量。不要写到前端代码,也不要提交到 git。
14. 接收地址必须用 HTTPS,拒绝纯 http 请求。
15. 把文章持久化成功作为发布成功边界。文章一旦保存并公开,就返回 200/201、targetPostId、publishedUrl、status 和 slug。
16. 缓存刷新、IndexNow、Webhook、统计等发布后附加任务与文章写入分开处理。它们失败时只记录安全日志,不能抛出 500 覆盖已经成功的发布结果。
17. 同一 sourceArticleId 已存在时,先直接返回已有文章的成功响应;不要因为再次执行发布后附加任务而阻塞幂等成功。
18. 请补测试:dryRun 成功并返回分类标签列表、token 错误返回 401、缺必填字段返回 400、同一 sourceArticleId 幂等返回成功、不同文章 slug 重复返回 409、带分类和可点击标签的成功发布、分类和标签字段分别按各自 schema 查询、Markdown 正文能转成安全 HTML 且不会显示原始 ## 标题、不带可选字段的成功发布;还要模拟发布后附加任务失败,确认接口仍返回成功、文章只创建一次、重复 sourceArticleId 仍返回已有公开地址。

Need help? Email [email protected].

SEO 内容发布接入文档 | RankOps AI