Skip to content

OnPage 重复检测

POST /v3/on_page/duplicate_content

本接口使用 POST /v3/on_page/duplicate_content,根据指定页面返回相似的页面列表,同时提供页面性能、质量和 SEO 检查数据。

接口使用 SimHash 算法计算相似度,分值范围为 010

  • 0:不相似
  • 10:一致
  • 默认将相似度大于或等于 6 的页面判定为重复

计费说明

本接口当前不收取任务费用,任务结果可在提交后的 30 天获取。

参考价约 ¥0 / 次。扣费以响应头 X-SeerMarTech-Charge-CNY 为准。

请求说明

  • 请求方法POST
  • 请求路径/v3/on_page/duplicate_content
  • 请求地址https://api.seermartech.cn/v3/on_page/duplicate_content
  • Content-Typeapplication/json
  • 字符编码:UTF-8
  • 请求体格式:JSON 数组

请求中的 id须来自 /v3/on_page/task_post 接口的任务创建响应。

请求参数

请求体为任务数组,每个代表一个查询任务。

参数类型说明
idstring任务 ID。使用已创建任务的 ID。示例:07131248-1535-0216-1000-17384017ad04
urlstring要检测重复的初始页面 URL
similarityinteger相似度阈值,取值范围为 010。默认值为 6,当相似度大于或等于该值时视为重复
limitinteger返回页面的最大数量。默认值为 100,最大值为 1000
offsetinteger结果偏移量。默认值为 0,最大值为 2000000。例如设置为 10 时,跳过结果中的前 10 条记录
tagstring自定义任务标识,最多 255 个字符。可用于匹任务与结果,提交的值会原样返回在响应的 data 对象中

请求示例

bash
curl --location --request POST \
  "https://api.seermartech.cn/v3/on_page/duplicate_content" \
  --header "Authorization: Bearer smt_live_YOUR_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '[
    {
      "id": "07281559-0695-0216-0000-c269be8b7592",
      "url": "https://www.etsy.com/",
      "similarity": 6,
      "limit": 100,
      "offset": 0,
      "tag": "duplicate-check-001"
    }
  ]'

Python 示例

python
import requests

url = "https://api.seermartech.cn/v3/on_page/duplicate_content"

headers = {
    "Authorization": "Bearer smt_live_YOUR_KEY",
    "Content-Type": "application/json",
}

payload = [
    {
        "id": "07281559-0695-0216-0000-c269be8b7592",
        "url": "https://www.etsy.com/",
        "similarity": 6,
        "limit": 100,
        "offset": 0,
        "tag": "duplicate-check-001",
    }
]

response = requests.post(url, headers=headers, json=payload)
result = response.json()

if result.get("status_code") == 20000:
    print(result)
else:
    print(
        "请求失败,状态码:%s,消息:%s"
        % (result.get("status_code"), result.get("status_message"))
    )

TypeScript 示例

typescript
import axios from "axios";

const response = await axios.post(
  "https://api.seermartech.cn/v3/on_page/duplicate_content",
  [
    {
      id: "07281559-0695-0216-0000-c269be8b7592",
      url: "https://www.etsy.com/",
      similarity: 6,
      limit: 100,
      offset: 0,
      tag: "duplicate-check-001",
    },
  ],
  {
    headers: {
      Authorization: "Bearer smt_live_YOUR_KEY",
      "Content-Type": "application/json",
    },
  }
);

if (response.data.status_code === 20000) {
  console.log(response.data);
} else {
  console.error(
    response.data.status_code,
    response.data.status_message
  );
}

响应结构

接口返回 JSON 对象,主要结构如下:

json
{
  "version": "0.1.20210129",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "1.3879 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "07281559-0695-0216-0000-c269be8b7592",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "1.3879 sec.",
      "cost": 0,
      "result_count": 1,
      "path": [
        "v3",
        "on_page",
        "duplicate_content"
      ],
      "data": {
        "api": "on_page",
        "function": "duplicate_content",
        "id": "07281559-0695-0216-0000-c269be8b7592",
        "url": "https://www.etsy.com/",
        "similarity": 6,
        "limit": 100,
        "offset": 0,
        "tag": "duplicate-check-001"
      },
      "result": [
        {
          "crawl_progress": "finished",
          "crawl_status": {
            "max_crawl_pages": 100,
            "pages_in_queue": 0,
            "pages_crawled": 100,
            "items_count": 1
          },
          "items": [
            {
              "url": "https://www.etsy.com/",
              "total_count": 1,
              "pages": [
                {
                  "similarity": 8.7,
                  "page": {
                    "resource_type": "html",
                    "status_code": 200,
                    "location": null,
                    "url": "https://example.com/page",
                    "meta": {},
                    "content": {},
                    "spell": {},
                    "resource_errors": {},
                    "social_media_tags": {},
                    "page_timing": {},
                    "onpage_score": 88.36,
                    "checks": {},
                    "last_modified": {}
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

顶层响应字段

字段类型说明
versionstring当前 API 版本
status_codeinteger局状态码。成功通常为 20000
status_messagestring局状态信息
timestring接口执行耗时,单位为秒
costfloat平台原始 USD 成本兼容字段;人民币实扣以 X-SeerMarTech-Charge-CNY 为准。
tasks_countintegertasks 数组中的任务总数
tasks_errorintegertasks 数组中返回错误的任务数
tasksarray任务结果数组

tasks 任务字段

字段类型说明
idstring系统生成的唯一任务标识,UUID 格式
status_codeinteger任务状态码,通常位于 1000060000 范围
status_messagestring任务状态信息
timestring任务执行耗时,单位为秒
costfloat平台原始 USD 成本兼容字段;人民币实扣以 X-SeerMarTech-Charge-CNY 为准。
result_countintegerresult 数组中的数量
patharray请求路径
dataobject提交任务时使用的参数
resultarray查询结果数组

结果字段

抓取状态

字段类型说明
crawl_progressstring抓取状态,可取 in_progressfinished
crawl_statusobject抓取会话
crawl_status.max_crawl_pagesinteger创建任务时设置的最大抓取页数
crawl_status.pages_in_queueinteger当前排队抓取的页面数量
crawl_status.pages_crawledinteger已抓取页面数量
crawl_status.items_countintegeritems 数组中的结果数量
itemsarray重复检测结果数组

items 字段

字段类型说明
urlstring请求中指定的初始页面 URL
total_countinteger检测到的重复页面总数
pagesarray含重复的页面列表

重复页面字段

字段类型说明
similarityobject/number相似度。文档定义为相似度分值,范围为 010,默认 >=6 判定为重复
pagearray/object重复页面的详细信息

page 页面字段

页面基础信息

字段类型说明
resource_typestring资源类型,通常为 html
status_codeinteger页面 HTTP 状态码
locationstringLocation 响应头,表示页面重定向目标 URL
urlstring页面 URL
metaobject页面属性,取决于资源类型
titlestring页面标题
charsetinteger页面字符集编码,例如 65001
followbooleanmeta robots 是否爬虫跟随页面链接;为 false 时表示存在 nofollow
generatorstringgenerator标签
htagsobjectHTML 标题标签信息
descriptionstringdescription标签
faviconstring页面图标 URL
meta_keywordsstringkeywords标签
canonicalstring规范页面 URL
internal_links_countinteger页面链接数量
external_links_countinteger页面外部链接数量
inbound_links_countinteger指向该页面的链接数量
images_countinteger图片数量
images_sizeinteger图片总大小,单位为字节
scripts_countinteger脚本数量
scripts_sizeinteger脚本总大小,单位为字节
stylesheets_countinteger样式表数量
stylesheets_sizeinteger样式表总大小,单位为字节
title_lengthintegertitle 标签字符数
description_lengthintegerdescription 标签字符数
render_blocking_scripts_countinteger阻塞页面渲染的脚本数量
render_blocking_stylesheets_countinteger阻塞页面渲染的样式表数量
cumulative_layout_shiftfloat累积布局偏移 CLS,用于衡量页面布局稳定性

content信息

字段类型说明
plain_text_sizeinteger页面纯文本总大小,单位为字节
plain_text_rateinteger/float纯文本占页面大小的比例,即 plain_text_size / size
plain_text_word_countfloat页面单词数量
automated_readability_indexfloat自动化可读性指数
coleman_liau_readability_indexfloatColeman-Liau 可读性指数
dale_chall_readability_indexfloatDale-Chall 可读性指数
flesch_kincaid_readability_indexfloatFlesch-Kincaid 可读性指数
smog_readability_indexfloatSMOG 可读性指数
description_to_content_consistencyfloat页面描述与正文的一致性,范围为 01
title_to_content_consistencyfloat页面标题与正文的一致性,范围为 01
meta_keywords_to_content_consistencyfloatmeta keywords 与正文的一致性,范围为 01
deprecated_tagsarray页面中使用的过时标签
duplicate_meta_tagsarray重复的标签

拼写、资源和社交标签

字段类型说明
spellobject拼写检查结果
spell.hunspell_language_codestring拼写检查语言代码
spell.misspelledarray拼写错误单词数组
spell.misspelled[].wordstring拼写错误的单词
resource_errorsobject页面资源错误与警告
resource_errors.errorsarray资源错误列表
resource_errors.errors[].lineinteger发现错误的行号
resource_errors.errors[].messagestring错误信息
resource_errors.warningsarray资源警告列表
resource_errors.warnings[].lineinteger警告对应的行号;0 表示警告与整个页面
resource_errors.warnings[].messagestring警告信息。常见值 Has node with more than 60 childs.Has more that 1500 nodes.HTML depth more than 32 tags.
social_media_tagsobject页面中检测到的社交媒体标签及,支持 Open Graph、Twitter Card 等标签

page_timing 页面加载指标

字段类型说明
time_to_interactiveinteger首次可交互时间 TTI,单位为毫秒
dom_completeinteger页面及子资源下载完成的时间,单位为毫秒
largest_contentful_paintfloat最大绘制 LCP,单位为毫秒
first_input_delayfloat首次延迟 FID,单位为毫秒
connection_timeinteger建立服务器连接的耗时,单位为毫秒
time_to_secure_connectioninteger建立连接的耗时,单位为毫秒
request_sent_timeinteger发送请求的耗时,单位为毫秒
waiting_timeinteger首字节时间 TTFB,单位为毫秒
download_timeinteger浏览器接收响应的耗时,单位为毫秒
duration_timeinteger接收完整响应的总耗时,单位为毫秒
fetch_startinteger开始下载 HTML 资源的时间
fetch_endinteger完成下载 HTML 资源的时间

页面性能和抓取信息

字段类型说明
onpage_scorefloat页面 SEO 优化得分,范围为 0~100,100 表示未发现严重页面问题
total_dom_sizeinteger页面 DOM 总大小
custom_js_responsestring/object/integer执行自定义 JavaScript 的结果。只有创建任务时指定 custom_js 才会返回,类型取决于脚本结果
custom_js_client_exceptionstring执行自定义 JavaScript 时产生的错误信息
broken_resourcesboolean页面是否存在损坏资源
broken_linksboolean页面是否存在失效链接
duplicate_titleboolean页面是否存在重复标题
duplicate_descriptionboolean页面是否存在重复描述
duplicate_contentboolean页面是否存在重复
click_depthinteger从首页到达该页面所需的点击层级
sizeinteger页面资源大小,单位为字节
encoded_sizeinteger编码后的页面大小,单位为字节
total_transfer_sizeinteger压缩后的页面传输大小
fetch_timestring资源抓取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00,例如 2019-11-15 12:57:46 +00:00
content_encodingstring编码类型
media_typestring页面使用的媒体类型
serverstring服务器版本
is_resourceboolean页面是否为单一资源

cache_control 缓存信息

字段类型说明
cachableboolean页面是否可缓存
ttlinteger缓存有效期,单位取决于接口返回值,表示浏览器缓存资源的时间

last_modified 最后修改时间

如果没有对应数据,last_modified 或子字段可能为 null

字段类型说明
headerstringHTTP 响应头记录的最后修改时间
sitemapstringSitemap 中记录的最后修改时间
meta_tagstring标签中记录的最后修改时间

时间均使用 UTC 格式:yyyy-mm-dd hh-mm-ss +00:00

checks 页面检查项

以下字段均为布尔值,用于表示页面是否存在对应问题:

字段含义
no_content_encoding页面未使用压缩编码
high_loading_time页面加载时间 3 秒
is_redirect页面存在 3XX 重定向
is_4xx_code页面返回 4xx 状态码
is_5xx_code页面返回 5xx 状态码
is_broken页面返回小于 200 或大于 400 的状态码
is_www页面位于 www 子域名
is_https页面使用 HTTPS
is_http页面使用 HTTP
high_waiting_timeTTFB过 1.5 秒
no_doctype页面缺少 DOCTYPE 声明
canonical页面为规范页面
no_encoding_meta_tag页面缺少编码标签;在 canonical=true 时提供
no_h1_tag页面缺少或为空的 H1 标签;在 canonical=true 时提供
https_to_http_linksHTTPS 页面指向 HTTP 页面的链接;在 canonical=true 时提供
has_html_doctype页面 HTML DOCTYPE 声明
size_greater_than_3mb页面大小 3 MB;在 canonical=true 时提供
meta_charset_consistency页面声明的字符集与字符集不一致;在 canonical=true 时提供
has_meta_refresh_redirect页面 Meta Refresh 重定向;在 canonical=true 时提供
has_render_blocking_resources页面阻塞渲染的脚本或样式;在 canonical=true 时提供
redirect_chain页面到达前至少发生两次重定向
low_content_rate纯文本大小与页面大小的比值小于 0.1;在 canonical=true 时提供
high_content_rate纯文本大小与页面大小的比值大于 0.9;在 canonical=true 时提供
low_character_count页面字符数少于 1024;在 canonical=true 时提供
high_character_count页面字符数 256000;在 canonical=true 时提供
small_page_size页面大小小于 1024 字节;在 canonical=true 时提供
large_page_size页面大小 1 MB;在 canonical=true 时提供
low_readability_rateFlesch-Kincaid 可读性得分低于 15;在 canonical=true 时提供
irrelevant_description页面描述与正文性低于 0.2;在 canonical=true 时提供
irrelevant_title页面标题与正文性低于 0.3;在 canonical=true 时提供
irrelevant_meta_keywordskeywords 与正文性低于 0.6;在 canonical=true 时提供
title_too_longtitle过 65 个字符;在 canonical=true 时提供
title_too_shorttitle 少于 30 个字符;在 canonical=true 时提供
deprecated_html_tags页面使用过时 HTML 标签;在 canonical=true 时提供
duplicate_meta_tags页面存在多个相同类型的标签;在 canonical=true 时提供
duplicate_title_tag页面存在多个 title 标签;在 canonical=true 时提供
no_image_alt图片缺少 alt 属性;在 canonical=true 时提供
no_image_title图片缺少 title 属性;在 canonical=true 时提供
no_description页面缺少或为空的 description 标签;在 canonical=true 时提供
no_title页面缺少或为空的 title 标签;在 canonical=true 时提供
no_favicon页面缺少 favicon;在 canonical=true 时提供
seo_friendly_urlURL 不符合 SEO 友好标准;在 canonical=true 时提供
flash页面 Flash素
frame页面 frameiframeframeset 标签
lorem_ipsum页面 Lorem ipsum 占位文本;在 canonical=true 时提供
has_misspelling页面拼写错误
seo_friendly_url_characters_checkURL 使用大小写拉丁字母、数字和连字符
seo_friendly_url_dynamic_checkURL 不动态参数
seo_friendly_url_keywords_checkURL 与页面标题
seo_friendly_url_relative_length_checkURL 相对路径不 120 个字符
is_orphan_page页面没有站页面链接指向
is_link_relation_conflict指向页面的链接同时 follow 和 nofollow
has_links_to_redirects页面链接指向返回 3XX 的页面
recursive_canonical页面规范链接指向另一页面,而另一页面又指回当前页面
canonical_chain规范链接形成链式指向,例如页面 A 指向 B,B 再指向 C
canonical_to_redirect规范链接指向会发生 3XX 重定向的页面
canonical_to_broken规范链接指向返回 4xx5xx 的失效页面

seo_friendly_url 综合以下四项判断:

  1. 相对路径长度小于 120 个字符;
  2. 不特殊字符;
  3. 不动态参数;
  4. URL 与页面。

任一项不满足时,该 URL 可能被判定为非 SEO 友好。

错误处理

请根据响应中的以下字段处理异常:

  • status_code:局或任务级状态码
  • status_message:对应的错误或提示信息
  • tasks_error:返回错误的任务数量

建议在客户端实现以下处理逻辑:

  1. 检查 HTTP 状态码;
  2. 检查顶层 status_code 是否为 20000
  3. 遍历 tasks,单独处理任务级错误;
  4. crawl_progress=in_progress 的结果进行轮询或延迟重试;
  5. 对网络时、限流和服务端错误执行带退避策略的重试。

实用场景

  • 定位站重复页面:按相似度阈值筛选重复,减少耗并明确页面规范化策略。
  • 审查模板化:批量识别商品页、分类页或地区页中的高度相似正文,指导差异化改写。
  • 评估重复页面质量:结合 onpage_score、标题、描述、一致性和可读性指标,确定优优化页面。
  • 排查重复伴随的技术问题:同时检查 canonical、重定向、失效链接、孤立页面和重复标签,完善索引控制。
  • 建立理单:结合 similarityduplicate_contentduplicate_titleduplicate_description 字段,生成合并、删除或重写任务。

统一入口:官网 · LLM API · 控制台