Skip to content

设置 OnPage 抓取任务

POST /v3/on_page/task_post

本接口使用 POST 方法,路径为 /v3/on_page/task_post,用于创建 OnPage 网站审计任务。本平台会检查网站页面中的 60 多项可参数标签、重复、图片标签、HTTP 响应码及页面 SEO 问题,并返回可用于优化的检测结果。完整检测项请参考 /v3/on_page/pages

接口信息

http
POST https://api.seermartech.cn/v3/on_page/task_post

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

json
[
  {
    "target": "example.com",
    "max_crawl_pages": 10
  }
]

调用限制:

平台限流以认证说明中的 30/60/120 次/分钟规则为准。

  • 每次 POST 请求最多 100 个任务。 -过 100 个的任务将返回错误码 40006
  • 同时执行的请求数最多为 30 个。
  • 每个任务单独计费。
  • 如启用资源加载、JavaScript 执行或浏览器渲染等高级能力,可能产生额外费用。
  • 实扣费以响应头 X-SeerMarTech-Charge-CNY 为准。

请求参数

参数类型说明
targetstring目标域名。不得 https://www.。如果传页面 URL,系统将使用该 URL 中的域名作为目标域名。
max_crawl_pagesinteger最大抓取页面数。若设置为 1 且未指定 start_url,或 start_url 为首页,以下站点级检测默认禁用:test_canonicalizationenable_www_redirect_checktest_hidden_server_signaturetest_page_not_foundtest_directory_browsingtest_https_redirect。如需强制启用,请设置 force_sitewide_checkstrue。如果 max_crawl_pages1start_url 不是首页,则所有站点级检测默认禁用。
start_urlstring首个抓取 URL,是绝对 URL。若只抓取单个页面,请在此填写页面 URL,并将 max_crawl_pages 设置为 1
force_sitewide_checksboolean单页抓取时是否启用站点级检测。默认值为 false
priority_urlsarray优抓取的 URL,系统会跳过普通抓取队列优处理。最多 20 个,是绝对 URL,且属于 target 域名。除非设置 allow_subdomainstrue,否则子域名会被忽略。
max_crawl_depthinteger抓取深度。起始页面为第 0 层,从起始页面链接到的页面为第 1 层,以此类推。
crawl_delayinteger爬虫两次访问服务器之间的间隔,单位为毫秒。默认值为 2000
store_raw_htmlboolean是否保存页面 HTML。设置为 true 后,可通过 /v3/on_page/raw_html 获取原始 HTML。默认值为 false
enable_content_parsingboolean是否解析页面。设置为 true 后,可使用 /v3/on_page/content_parsing/live。默认值为 false
support_cookiesboolean抓取页面时是否支持 Cookie。默认值为 false
accept_languagestring访问网站时使用的语言请求头。支持 xxxx-XXxxx-XX 等格式。未设置时,部分网站可能拒绝访问,此时响应中的页面类型可能为 "broken"
custom_robots_txtstring自定义 robots.txt 规则,例如 Disallow: /directory1/
robots_txt_merge_modestring自定义 robots 规则的处理方式。可选值:mergeoverride。默认值为 merge。设置为 override 时,同时指定 custom_robots_txt
custom_user_agentstring自定义爬虫 User-Agent。默认值为 Mozilla/5.0 (compatible; RSiteAuditor)
browser_presetstring浏览器屏幕预设。可选值:desktopmobiletablet。使用该参数时无需设置屏幕宽度、高度和缩放比例。同时将 enable_javascriptenable_browser_rendering 设置为 true
browser_screen_widthinteger浏览器屏幕宽度,单位为像素,范围为 2409999。设置后会忽略 browser_preset
browser_screen_heightinteger浏览器屏幕高度,单位为像素,范围为 2409999。设置后会忽略 browser_preset
browser_screen_scale_factorfloat浏览器屏幕缩放比例,范围为 0.53。设置后会忽略 browser_preset
respect_sitemapboolean是否主 Sitemap 中的页面顺序抓取。默认值为 false。启用后,响应中的 click_depth 将为 0,且 max_crawl_depth 会被忽略,抓取页面数由 max_crawl_pages 控制。
custom_sitemapstring自定义 Sitemap URL。使用此参数时将 respect_sitemap 设置为 true
crawl_sitemap_onlyboolean是否抓取 Sitemap 中列出的页面。默认值为 false。未指定 custom_sitemap 时,将使用默认 Sitemap。使用此参数时将 respect_sitemap 设置为 true
load_resourcesboolean是否加载图片、样式表、脚本及失效资源。默认值为 false。启用后可能产生额外费用。
enable_www_redirect_checkboolean是否检测 www 与非 www 域名之间的重定向。默认值为 false
enable_javascriptboolean是否执行页面 JavaScript。默认值为 false。启用后可能产生额外费用。
enable_xhrboolean是否通过 XMLHttpRequest 从 Web 服务器请求数据。默认值为 false。使用此参数时将 enable_javascript 设置为 true
enable_browser_renderingboolean是否模拟浏览器渲染,用于获取 Core Web Vitals 指标。启用后会加载样式、图片、字体、动画、视频等资源,并可返回 FID、CLS、LCP。使用此参数时,enable_javascriptload_resources须同时设置为 true。启用后可能产生额外费用。
disable_cookie_popupboolean是否禁用 Cookie 同意弹窗。默认值为 false
custom_jsstring在页面中执行的自定义 JavaScript。脚本最长 2000 个字符,执行时间最长 700 毫秒。返回值会写响应中的 custom_js_response
validate_micromarkupboolean是否启用结构化数据验证。默认值为 false。启用后可使用 /v3/on_page/microdata
allow_subdomainsboolean是否抓取目标网站的所有子域名。默认值为 false
allowed_subdomainsarray指定抓取的子域名。使用此参数时应将 allow_subdomains 设置为 false,否则该字段会被忽略并抓取所有子域名。
disallowed_subdomainsarray指定不抓取的子域名。使用此参数时将 allow_subdomains 设置为 true
check_spellboolean是否检查网站拼写。默认值为 false
check_spell_languagestring拼写检查语言。支持:hyeubgcahrcsdanleneoetfofafrfyglkadeelhehuisiagaitrwlalvltmkmnnenbnnplptrogdsrskslessvtrtkukvi。未设置时根据页面自动判断。
check_spell_exceptionsarray拼写检查时忽略的词语。单个词最长 100 个字符,最多 1000 个词。
calculate_keyword_densityboolean是否计算页面密度。默认值为 false。启用后可能产生额外费用;抓取完成后可通过 /v3/on_page/keyword_density 获取结果。
checks_thresholdobject自定义检测阈值。支持修改整数类型阈值,部分浮点型阈值也可,取决于检测项。
disable_sitewide_checksarray禁用指定的站点级检测。可选检测项:test_page_not_foundtest_canonicalizationtest_https_redirecttest_directory_browsing
disable_page_checksarray禁用指定的页面级检测,影响 onpage_score
switch_poolboolean是否切换代理池。设置为 true 后会使用代理池获取数据,适用于批量提交任务时偶发出现 rate-limitsite_unreachable 错误的场景。
return_despite_timeoutboolean页面在 120 秒未加载完成并时时,是否仍返回已获取的数据。默认值为 false
tagstring用户自定义任务标识,最长 255 个字符。该值会出现在响应 data 对象中,可用于任务与业务记录。
pingback_urlstring任务完成后的回调地址。任务完成后,本平台会向该地址发送 GET 请求。URL 中可使用 $id$tag 占位符,系统会自动替换为任务 ID 和 URL 编码后的标签值。

browser_preset 预设值

预设browser_screen_widthbrowser_screen_heightbrowser_screen_scale_factor
desktop192010801
mobile3908443
tablet102413662

checks_threshold 可阈值

json
{
  "title_too_short": 30,
  "title_too_long": 65,
  "small_page_size": 1024,
  "large_page_size": 1048576,
  "low_character_count": 1024,
  "high_character_count": 256000,
  "low_content_rate": 0.1,
  "high_content_rate": 0.9,
  "high_loading_time": 3000,
  "high_waiting_time": 1500,
  "low_readability_rate": 15.0,
  "irrelevant_description": 0.2,
  "irrelevant_title": 0.3,
  "irrelevant_meta_keywords": 0.6
}

例如,将页面加载时间阈值调整为 1 秒、页面大小阈值调整为 1000 KB:

json
{
  "checks_threshold": {
    "high_loading_time": 1,
    "large_page_size": 1000
  }
}

custom_js 示例

自定义脚本最长 2000 个字符,执行时间不得 700 毫秒。例如,检查页面是否加载了指定分析脚本:

javascript
let meta = {
  haveGoogleAnalytics: false,
  haveTagManager: false
};

for (let i = 0; i < document.scripts.length; i++) {
  const src = document.scripts[i].getAttribute("src");

  if (src !== undefined && src !== null) {
    if (src.indexOf("analytics.js") >= 0) {
      meta.haveGoogleAnalytics = true;
    }

    if (src.indexOf("gtm.js") >= 0) {
      meta.haveTagManager = true;
    }
  }
}

meta;

如果脚本为:

javascript
meta = {};
meta.url = document.URL;
meta.test = "test";
meta;

则响应中可能返回:

json
{
  "custom_js_response": {
    "url": "https://example.com/",
    "test": "test"
  }
}

请求示例

curl

bash
curl --location --request POST \
  "https://api.seermartech.cn/v3/on_page/task_post" \
  --header "Authorization: Bearer smt_live_YOUR_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '[
    {
      "target": "example.com",
      "max_crawl_pages": 10
    },
    {
      "target": "example.com",
      "max_crawl_pages": 10,
      "load_resources": true,
      "enable_javascript": true,
      "custom_js": "meta = {}; meta.url = document.URL; meta;",
      "tag": "some_string_123",
      "pingback_url": "https://your-server.com/pingscript?id=$id&tag=$tag"
    }
  ]'

TypeScript

typescript
import axios from "axios";

const postArray = [
  {
    target: "example.com",
    max_crawl_pages: 10,
    load_resources: true,
    enable_javascript: true,
    custom_js: "meta = {}; meta.url = document.URL; meta;",
    tag: "some_string_123",
    pingback_url: "https://your-server.com/pingscript?id=$id&tag=$tag"
  }
];

axios({
  method: "post",
  url: "https://api.seermartech.cn/v3/on_page/task_post",
  headers: {
    Authorization: "Bearer smt_live_YOUR_KEY",
    "Content-Type": "application/json"
  },
  data: postArray
})
  .then((response) => {
    // 处理接口返回结果
    console.log(response.data);
  })
  .catch((error) => {
    // 处理请求错误
    console.error(error.response?.data || error.message);
  });

Python

python
import requests

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

payload = [
    {
        "target": "example.com",
        "max_crawl_pages": 10
    },
    {
        "target": "example.com",
        "max_crawl_pages": 10,
        "load_resources": True,
        "enable_javascript": True,
        "custom_js": "meta = {}; meta.url = document.URL; meta;",
        "tag": "some_string_123",
        "pingback_url": "https://your-server.com/pingscript?id=$id&tag=$tag"
    }
]

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

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

if response.status_code == 200:
    result = response.json()
    if result.get("status_code") == 20000:
        print(result)
    else:
        print(
            "接口错误。状态码:%s,消息:%s"
            % (result.get("status_code"), result.get("status_message"))
        )
else:
    print("HTTP 错误:%s,响应:%s" % (response.status_code, response.text))

响应说明

接口返回 JSON 对象已创建任务的信息。由于该接口用于提交异步抓取任务,成功提交后,任务级别的 result 通常为 null。之后可使用任务 ID 查询任务结果。

顶层响应字段

字段类型说明
versionstring当前 API 版本。
status_codeinteger局状态码。成功时通常为 20000。完整错误码请参考 /v3/appendix/errors
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 数组中的数量。提交任务成功时通常为 0
patharray请求路径信息。
dataobject本次请求中提交的任务参数。
resultarray任务结果数组。对于任务提交接口,通常为 null

响应示例

json
{
  "version": "0.1.20200805",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0.0815 sec.",
  "cost": 0.00125,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "01234567-89ab-cdef-0123-456789abcdef",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0.0450 sec.",
      "cost": 0.00125,
      "result_count": 0,
      "path": [
        "v3",
        "on_page",
        "task_post"
      ],
      "data": {
        "api": "on_page",
        "function": "task_post",
        "target": "example.com",
        "max_crawl_pages": 10
      },
      "result": null
    }
  ]
}

错误处理

建议根据顶层 status_code、任务级 status_codestatus_message 分别处理请求错误与单任务错误。完整状态码和错误信息请参考 /v3/appendix/errors

实用场景

  • 批量提交网站技术审计任务:一次提交多个域名或多个项目站点,集中发现页面 SEO 缺陷并提高审计效率。
  • 抓取指定页面并执行单页检测:通过 start_urlmax_crawl_pages: 1 审核落地页、产品页或活动页,快速定位页面级优化问题。
  • 模拟移动端或桌面端浏览器渲染:使用 browser_presetenable_browser_rendering 获取不同设备下的页面表现及 Core Web Vitals 指标,为移动端性能优化提供依据。
  • 结合 Sitemap 进行站定向抓取:通过 respect_sitemapcustom_sitemapcrawl_sitemap_only 控制抓取范围,确保审计覆盖重点页面并减少无效抓取。
  • 启用密度、拼写和结构化数据检查calculate_keyword_densitycheck_spellvalidate_micromarkup,同时评估质量、分布及结构化数据规范性。

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