Skip to content

OnPage 重复标题与描述标签

POST /v3/on_page/duplicate_tags

本接口使用 POST 方法,路径为 /v3/on_page/duplicate_tags

text
POST https://api.seermartech.cn/v3/on_page/duplicate_tags

用于查询网站中重复 titledescription 标签的页面,同时返回页面性能、质量、技术 SEO 检查及抓取状态等数据。

计费说明

本接口当前不产生额外费用。任务结果可在创建任务后的 30 天获取。

扣费以响应头 X-SeerMarTech-Charge-CNY 为准。

请求说明

请求体使用 UTF-8 编码的 JSON 数组格式:

json
[
  {
    "id": "07131248-1535-0216-1000-17384017ad04",
    "type": "duplicate_description",
    "limit": 10
  }
]

id 为通过 OnPage 任务创建接口获取的任务 ID。

请求参数

参数类型说明
idstringOnPage 抓取任务 ID,可从任务创建接口的响应中获取。示例:07131248-1535-0216-1000-17384017ad04
typestring重复标签类型。可选值:duplicate_titleduplicate_description。结果将根据该参数返回重复标题或重复描述页面。
accumulatorstring指定要匹的标题或描述返回该标签值的重复页面。
limitinteger最多返回的页面数。默认值:100;最大值:1000
offsetinteger结果偏移量,默认值:0;最大值:2000000。例如设置为 10 时,跳过前 10 条结果并返回后续页面。
tagstring自定义任务标识,用于识别任务并匹结果,最长 255 个字符。指定的值会在响应的 data 对象中返回。

响应结构

响应为 JSON 对象,主要 tasks 数组。

顶层响应字段

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

任务字段

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

结果字段

抓取状态

字段类型说明
crawl_progressstring抓取状态,可选值:in_progressfinished
crawl_statusobject抓取会话。
crawl_status.max_crawl_pagesinteger创建任务时指定的最大抓取页数。
crawl_status.pages_in_queueinteger当前抓取队列中的页面数。
crawl_status.pages_crawledinteger已抓取页面数。
crawl_status.total_pages_countinteger目标网站中重复标签的页面总数。
crawl_status.pages_countinteger本次响应返回的重复标签页面数。
items_countintegeritems 数组中的数量。
itemsarray按重复标签值聚合的结果。
items[].accumulatorstring重复标签的。
items[].total_countinteger含该重复标签的页面总数。
items[].pagesarray含重复标签的页面列表。

页面基础信息

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

###信息 content

字段类型说明
content.plain_text_sizeinteger页面纯文本总大小,单位为字节。
content.plain_text_rateinteger纯文本占页面大小的比例,即 plain_text_size / size
content.plain_text_word_countfloat页面词数。
content.automated_readability_indexfloat自动可读性指数。
content.coleman_liau_readability_indexfloatColeman-Liau 可读性指数。
content.dale_chall_readability_indexfloatDale-Chall 可读性指数。
content.flesch_kincaid_readability_indexfloatFlesch-Kincaid 可读性指数。
content.smog_readability_indexfloatSMOG 可读性指数。
content.description_to_content_consistencyfloatdescription 与页面正文的一致性,取值范围为 01
content.title_to_content_consistencyfloattitle 与页面正文的一致性,取值范围为 01
content.meta_keywords_to_content_consistencyfloatkeywords 与页面正文的一致性,取值范围为 01
content.deprecated_tagsarray页面中的废弃 HTML 标签。
content.duplicate_meta_tagsarray页面中的重复标签。
content.spellobject拼写检查结果。
content.spell.hunspell_language_codestring拼写检查语言代码。
content.spell.misspelledarray拼写错误单词列表。
content.spell.misspelled[].wordstring拼写错误的单词。
content.resource_errorsobject资源错误与警告。
content.resource_errors.errorsarrayHTML 资源错误。
content.resource_errors.errors[].lineinteger发现错误的行号。
content.resource_errors.errors[].messagestring错误信息。
content.resource_errors.warningsarrayHTML 资源警告。
content.resource_errors.warnings[].lineinteger警告对应的行号;为 0 时表示警告针对整个页面。
content.resource_errors.warnings[].messagestring警告信息。
content.social_media_tagsobject页面中发现的社交媒体标签及, Open Graph、Twitter Card 等标签。

常见 HTML 结构警告:

  • Has node with more than 60 childs.:存在同一层级嵌套 60 个子节点的标签。
  • Has more that 1500 nodes.:DOM 树 1500 个。
  • HTML depth more than 32 tags.:HTML 嵌套深度 32 层。

页面加载指标 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页面 OnPage 优化得分,满分为 100
total_dom_sizeinteger页面 DOM 总大小。
custom_js_responsestring / object / integer执行自定义 JavaScript 后的结果。只有创建任务时指定 custom_js 才会返回,类型取决于脚本。
custom_js_client_exceptionstring执行自定义 JavaScript 时产生的错误信息。
broken_resourcesboolean页面是否损坏资源。
broken_linksboolean页面是否失效链接。
duplicate_titleboolean页面是否存在重复 title 标签。
duplicate_descriptionboolean页面是否存在重复 description 标签。
duplicate_contentboolean页面是否存在重复。
click_depthinteger从首页点击到达该页面所需的点击层级。
sizeinteger页面资源大小,单位为字节。
encoded_sizeinteger页面编码后的大小,单位为字节。
total_transfer_sizeinteger页面压缩后的传输大小,单位为字节。
fetch_timestring资源抓取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00
content_encodingstring编码类型。
media_typestring页面使用的媒体类型。
serverstring服务器版本。
is_resourceboolean是否为单一资源。

缓存信息 cache_control

字段类型说明
cache_control.cachableboolean页面是否可缓存。
cache_control.ttlinteger缓存生存时间,单位通常为秒。

页面检查结果 checks

字段类型说明
no_content_encodingboolean页面是否未使用压缩编码。
high_loading_timeboolean页面加载时间是否 3 秒。
is_redirectboolean页面是否发生 3XX 重定向。
is_4xx_codeboolean页面是否返回 4xx 状态码。
is_5xx_codeboolean页面是否返回 5xx 状态码。
is_brokenboolean页面是否损坏,即响应码小于 200 或大于 400
is_wwwboolean页面是否位于 www 子域名。
is_httpsboolean页面是否使用 HTTPS。
is_httpboolean页面是否使用 HTTP。
high_waiting_timeboolean时间(TTFB)是否 1.5 秒。
no_doctypeboolean页面是否缺少 DOCTYPE 声明。
canonicalboolean页面是否设置规范 URL。
no_encoding_meta_tagboolean页面是否缺少编码标签;在 canonical=true 时提供。
no_h1_tagboolean页面是否缺少或为空的 H1 标签;在 canonical=true 时提供。
https_to_http_linksbooleanHTTPS 页面是否指向 HTTP 页面的链接;在 canonical=true 时提供。
has_html_doctypeboolean页面是否 HTML DOCTYPE 声明。
size_greater_than_3mbboolean页面大小是否 3 MB;在 canonical=true 时提供。
meta_charset_consistencyboolean页面声明的字符集与字符集是否一致;在 canonical=true 时提供。
has_meta_refresh_redirectboolean页面是否通过 meta refresh 重定向;在 canonical=true 时提供。
has_render_blocking_resourcesboolean页面是否阻塞渲染的脚本或样式;在 canonical=true 时提供。
redirect_chainboolean页面是否存在多次重定向。
low_content_rateboolean纯文本占页面大小的比例是否低于 0.1;在 canonical=true 时提供。
high_content_rateboolean纯文本占页面大小的比例是否高于 0.9;在 canonical=true 时提供。
low_character_countboolean页面字符数是否少于 1024;在 canonical=true 时提供。
high_character_countboolean页面字符数是否 256000;在 canonical=true 时提供。
small_page_sizeboolean页面大小是否小于 1024 字节;在 canonical=true 时提供。
large_page_sizeboolean页面大小是否 1 MB;在 canonical=true 时提供。
low_readability_ratebooleanFlesch-Kincaid 可读性得分是否低于 15;在 canonical=true 时提供。
irrelevant_descriptionboolean描述与正文是否不,性阈值为 0.2;在 canonical=true 时提供。
irrelevant_titleboolean标题与正文是否不,性阈值为 0.3;在 canonical=true 时提供。
irrelevant_meta_keywordsboolean与正文是否不,性阈值为 0.6;在 canonical=true 时提供。
title_too_longbooleantitle 是否 65 个字符;在 canonical=true 时提供。
title_too_shortbooleantitle 是否少于 30 个字符;在 canonical=true 时提供。
deprecated_html_tagsboolean页面是否使用废弃 HTML 标签;在 canonical=true 时提供。
duplicate_meta_tagsboolean页面是否多个相同类型的标签;在 canonical=true 时提供。
duplicate_title_tagboolean页面是否多个 title 标签;在 canonical=true 时提供。
no_image_altboolean图片是否缺少 alt 属性;在 canonical=true 时提供。
no_image_titleboolean图片是否缺少 title 属性;在 canonical=true 时提供。
no_descriptionboolean页面是否缺少或为空的 description 标签;在 canonical=true 时提供。
no_titleboolean页面是否缺少或为空的 title 标签;在 canonical=true 时提供。
no_faviconboolean页面是否缺少 favicon;在 canonical=true 时提供。
seo_friendly_urlbooleanURL 是否符合 SEO 友好标准。检查相对路径长度、特殊字符、动态参数和 URL 与页面的性。
flashboolean页面是否 Flash素。
frameboolean页面是否 frameiframeframeset 标签。
lorem_ipsumboolean页面是否 Lorem ipsum 占位文本;在 canonical=true 时提供。
has_misspellingboolean页面是否拼写错误。
seo_friendly_url_characters_checkbooleanURL 是否大小写拉丁字母、数字和连字符。
seo_friendly_url_dynamic_checkbooleanURL 是否不动态参数。
seo_friendly_url_keywords_checkbooleanURL 是否与 title标签。
seo_friendly_url_relative_length_checkbooleanURL 相对路径是否不 120 个字符。
is_orphan_pageboolean页面是否为孤立页面,即没有站页面链接指向它。
is_link_relation_conflictboolean指向该页面的链接是否同时 dofollow 和 nofollow 链接。
has_links_to_redirectsboolean页面是否链接到返回 3XX 重定向的页面。
recursive_canonicalboolean是否存在循环规范化,即页面 A 指向页面 B,而页面 B 又指回页面 A。
canonical_chainboolean是否存在规范 URL 链,例如 A 指向 B,B 又指向 C。
canonical_to_redirectboolean规范 URL 是否指向发生 3XX 重定向的页面。
canonical_to_brokenboolean规范 URL 是否指向返回 4xx5xx 的页面。

最后修改信息 last_modified

字段类型说明
last_modifiedobject / null资源变更信息;无数据时为 null
last_modified.headerstring / nullHTTP Header 中的最后修改时间,UTC 格式。
last_modified.sitemapstring / nullSitemap 中的最后修改时间,UTC 格式。
last_modified.meta_tagstring / null页面标签中的最后修改时间,UTC 格式。

示例时间格式:

text
2019-11-15 12:57:46 +00:00

请求示例

cURL

bash
curl --location --request POST \
  "https://api.seermartech.cn/v3/on_page/duplicate_tags" \
  --header "Authorization: Bearer smt_live_YOUR_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '[
    {
      "id": "07281559-0695-0216-0000-c269be8b7592",
      "type": "duplicate_description",
      "limit": 10
    }
  ]'

Python

python
import requests

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

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

payload = [
    {
        "id": "07281559-0695-0216-0000-c269be8b7592",
        "type": "duplicate_description",
        "limit": 10,
    }
]

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

if response.status_code == 200:
    result = response.json()
    # 根据 result["status_code"] 判断业务处理结果
    print(result)
else:
    print(f"HTTP 请求失败:{response.status_code}")

TypeScript

typescript
import axios from "axios";

const payload = [
  {
    id: "07281559-0695-0216-0000-c269be8b7592",
    type: "duplicate_description",
    limit: 10,
  },
];

axios
  .post(
    "https://api.seermartech.cn/v3/on_page/duplicate_tags",
    payload,
    {
      headers: {
        Authorization: "Bearer smt_live_YOUR_KEY",
        "Content-Type": "application/json",
      },
    }
  )
  .then((response) => {
    // 响应数据
    console.log(response.data);
  })
  .catch((error) => {
    console.error("请求失败:", error.response?.data || error.message);
  });

响应示例

以下示例展示查询重复描述标签时的主要响应结构:

json
{
  "version": "0.1.20210129",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "1.4464 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "07281559-0695-0216-0000-c269be8b7592",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "1.4464 sec.",
      "cost": 0,
      "result_count": 1,
      "data": {
        "api": "on_page",
        "function": "duplicate_tags",
        "type": "duplicate_description",
        "limit": 10
      },
      "result": [
        {
          "crawl_progress": "finished",
          "crawl_status": {
            "max_crawl_pages": 100,
            "pages_in_queue": 0,
            "pages_crawled": 100,
            "total_pages_count": 2,
            "pages_count": 2
          },
          "items_count": 1,
          "items": [
            {
              "accumulator": "示例重复描述",
              "total_count": 2,
              "pages": [
                {
                  "resource_type": "html",
                  "status_code": 200,
                  "location": null,
                  "url": "https://example.com/page-a",
                  "meta": {
                    "title": "示例页面标题",
                    "charset": 65001,
                    "follow": true,
                    "generator": null,
                    "htags": {
                      "h1": ["示例标题"]
                    },
                    "description": "示例重复描述",
                    "favicon": "https://example.com/favicon.ico",
                    "meta_keywords": null,
                    "canonical": "https://example.com/page-a",
                    "internal_links_count": 12,
                    "external_links_count": 2,
                    "inbound_links_count": 3,
                    "images_count": 5,
                    "images_size": 102400,
                    "scripts_count": 6,
                    "scripts_size": 204800,
                    "stylesheets_count": 2,
                    "stylesheets_size": 51200,
                    "title_length": 8,
                    "description_length": 10,
                    "render_blocking_scripts_count": 1,
                    "render_blocking_stylesheets_count": 1,
                    "cumulative_layout_shift": 0.1
                  },
                  "content": {
                    "plain_text_size": 8077,
                    "plain_text_rate": 0.0543,
                    "plain_text_word_count": 1155,
                    "automated_readability_index": 20.77,
                    "coleman_liau_readability_index": 9.49,
                    "dale_chall_readability_index": 11.57,
                    "flesch_kincaid_readability_index": 6.18,
                    "smog_readability_index": 28,
                    "description_to_content_consistency": 0.56,
                    "title_to_content_consistency": 0.71,
                    "meta_keywords_to_content_consistency": null,
                    "deprecated_tags": null,
                    "duplicate_meta_tags": null,
                    "spell": null,
                    "resource_errors": {
                      "errors": [],
                      "warnings": []
                    },
                    "social_media_tags": {}
                  },
                  "page_timing": {
                    "time_to_interactive": 872,
                    "dom_complete": 1007,
                    "largest_contentful_paint": 1648.48,
                    "first_input_delay": 0.055,
                    "connection_time": 10,
                    "time_to_secure_connection": 22,
                    "request_sent_time": 0,
                    "waiting_time": 406,
                    "download_time": 1,
                    "duration_time": 439,
                    "fetch_start": 0,
                    "fetch_end": 439
                  },
                  "onpage_score": 88.36,
                  "total_dom_size": 2312840,
                  "custom_js_response": null,
                  "custom_js_client_exception": null,
                  "broken_resources": false,
                  "broken_links": false,
                  "duplicate_title": true,
                  "duplicate_description": true,
                  "duplicate_content": true,
                  "click_depth": 1,
                  "size": 148870,
                  "encoded_size": 33167,
                  "total_transfer_size": 34974,
                  "fetch_time": "2021-02-24 17:02:22 +00:00",
                  "cache_control": {
                    "cachable": false,
                    "ttl": 0
                  },
                  "checks": {
                    "no_content_encoding": false,
                    "high_loading_time": false,
                    "is_redirect": false,
                    "is_4xx_code": false,
                    "is_5xx_code": false,
                    "is_broken": false,
                    "is_www": true,
                    "is_https": true,
                    "is_http": false,
                    "high_waiting_time": false,
                    "no_doctype": false,
                    "canonical": true,
                    "no_encoding_meta_tag": true,
                    "no_h1_tag": false,
                    "https_to_http_links": false,
                    "has_html_doctype": true,
                    "size_greater_than_3mb": false,
                    "meta_charset_consistency": true,
                    "has_meta_refresh_redirect": false,
                    "has_render_blocking_resources": true,
                    "redirect_chain": false,
                    "low_content_rate": true,
                    "high_content_rate": false,
                    "low_character_count": false,
                    "high_character_count": false,
                    "small_page_size": false,
                    "large_page_size": false,
                    "low_readability_rate": true,
                    "irrelevant_description": false,
                    "irrelevant_title": false,
                    "irrelevant_meta_keywords": false,
                    "title_too_long": true,
                    "title_too_short": false,
                    "deprecated_html_tags": false,
                    "duplicate_meta_tags": true,
                    "duplicate_title_tag": false,
                    "no_image_alt": true,
                    "no_image_title": true,
                    "no_description": false,
                    "no_title": false,
                    "no_favicon": false,
                    "seo_friendly_url": false,
                    "flash": false,
                    "frame": false,
                    "lorem_ipsum": false,
                    "has_misspelling": false,
                    "is_orphan_page": false,
                    "is_link_relation_conflict": false,
                    "has_links_to_redirects": false,
                    "recursive_canonical": false,
                    "canonical_chain": false,
                    "canonical_to_redirect": false,
                    "canonical_to_broken": false
                  },
                  "content_encoding": "gzip",
                  "media_type": "text/html",
                  "server": "Apache",
                  "is_resource": false,
                  "last_modified": {
                    "header": "2021-10-21 14:11:10 +00:00",
                    "sitemap": null,
                    "meta_tag": "2021-03-15 00:00:00 +00:00"
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

实用场景

  • 定位重复标题页面:批量发现同一网站中使用相同 title 的 URL,减少页面主题混淆并优化搜索结果展示。
  • 理重复描述标签:识别用相同 description 的页面,为产品页、分类页和页制定差异化描述。
  • 筛选指定重复文本:通过 accumulator 精确查找某一段重复标题或描述,支持 CMS 模板问题的快速排查。
  • 结合页面性能制定优化优级:利用 onpage_score、LCP、TTFB、页面大小和阻塞资源等字段,优处理重复标签且加载性能较差的页面。
  • 批量审计重复页面的技术 SEO 问题:结合规范 URL、孤立页面、重定向链、失效链接和重复检查结果,完善站页面治理流程。

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