SEO评分 API

API ID 14801

SEO审核API具有确定性的0-100分每次检查证据准备修复列表和用于AI搜索可见性的地理评分

API 文档

端点

请求
审核一页(POST /audit,带有JSON主体{"url": "…"}也有效)返回审核对象:分数,最高分数,等级,地理分数,状态码,响应时间毫秒,页面字节数,被截断,以及检查数组(每个检查包含ID,类别,标签,状态,分数,证据详情和修复文本)
Endpoint ID: 38378
GET https://zylalabs.com/api/14801/seoscore+api/38378/audit+one+page
输入参数

审核一页 — 端点功能

对象 描述
url 必需 URL of the public page to audit

剩余免费测试请求:3 / 3。


输入参数

url
API 示例响应
JSON
{
    "url": "https://example.com/",
    "finalUrl": "https://example.com/",
    "ok": true,
    "score": 29,
    "maxScore": 100,
    "grade": "F",
    "geoScore": 40,
    "statusCode": 200,
    "responseTimeMs": 16,
    "pageBytes": 577,
    "truncated": false,
    "checks": [
        {
            "id": "title_present",
            "category": "meta",
            "label": "Title tag present",
            "status": "pass",
            "points": 8,
            "maxPoints": 8,
            "details": "Title: \"Example Domain\"",
            "fix": null
        },
        {
            "id": "title_length",
            "category": "meta",
            "label": "Title length 30-60 chars",
            "status": "warn",
            "points": 0,
            "maxPoints": 4,
            "details": "Title is 14 characters.",
            "fix": "Rewrite the title to 30-60 characters so it is not truncated in search results."
        },
        {
            "id": "description_present",
            "category": "meta",
            "label": "Meta description present",
            "status": "fail",
            "points": 0,
            "maxPoints": 8,
            "details": "No meta description found.",
            "fix": "Add a meta description of 70-160 characters summarising the page."
        },
        {
            "id": "description_length",
            "category": "meta",
            "label": "Description length 70-160 chars",
            "status": "fail",
            "points": 0,
            "maxPoints": 4,
            "details": "No description to measure.",
            "fix": "Adjust the meta description to 70-160 characters."
        },
        {
            "id": "canonical_present",
            "category": "meta",
            "label": "Canonical URL declared",
            "status": "warn",
            "points": 0,
            "maxPoints": 3,
            "details": "No rel=canonical link found.",
            "fix": "Add <link rel=\"canonical\"> pointing at the preferred URL for this page."
        },
        {
            "id": "viewport_present",
            "category": "meta",
            "label": "Viewport meta present (mobile)",
            "status": "warn",
            "points": 0,
            "maxPoints": 3,
            "details": "No viewport meta found.",
            "fix": "Add <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">."
        },
        {
            "id": "h1_single",
            "category": "content",
            "label": "Exactly one H1 heading",
            "status": "fail",
            "points": 0,
            "maxPoints": 8,
            "details": "No H1 found.",
            "fix": "Use exactly one H1 that states the page's main topic."
        },
        {
            "id": "h2_present",
            "category": "content",
            "label": "H2 subheadings present",
            "status": "warn",
            "points": 0,
            "maxPoints": 4,
            "details": "0 H2 heading(s) found.",
            "fix": "Structure the page with H2 subheadings for each main section."
        },
        {
            "id": "word_count",
            "category": "content",
            "label": "At least 300 words of visible text",
            "status": "fail",
            "points": 0,
            "maxPoints": 6,
            "details": "27 words of visible text.",
            "fix": "Expand the page copy to at least 300 words of substantive, server-rendered text."
        },
        {
            "id": "image_alt",
            "category": "content",
            "label": "Image alt text coverage >= 80%",
            "status": "pass",
            "points": 4,
            "maxPoints": 4,
            "details": "No <img> tags on the page.",
            "fix": null
        },
        {
            "id": "lang_present",
            "category": "content",
            "label": "html lang attribute present",
            "status": "warn",
            "points": 0,
            "maxPoints": 3,
            "details": "No lang attribute on <html>.",
            "fix": "Add a lang attribute to the <html> tag, e.g. <html lang=\"en\">."
        },
        {
            "id": "https",
            "category": "technical",
            "label": "Served over HTTPS",
            "status": "pass",
            "points": 6,
            "maxPoints": 6,
            "details": "Final URL: https://example.com/",
            "fix": null
        },
        {
            "id": "status_200",
            "category": "technical",
            "label": "HTTP status 200",
            "status": "pass",
            "points": 6,
            "maxPoints": 6,
            "details": "Status: 200",
            "fix": null
        },
        {
            "id": "indexable",
            "category": "technical",
            "label": "Page is indexable (no noindex)",
            "status": "pass",
            "points": 5,
            "maxPoints": 5,
            "details": "No noindex directive; Googlebot allowed.",
            "fix": null
        },
        {
            "id": "robots_txt",
            "category": "technical",
            "label": "robots.txt present",
            "status": "warn",
            "points": 0,
            "maxPoints": 4,
            "details": "No robots.txt at the origin root.",
            "fix": "Publish a robots.txt at the site root with your crawl rules and sitemap location."
        },
        {
            "id": "sitemap",
            "category": "technical",
            "label": "XML sitemap discoverable",
            "status": "warn",
            "points": 0,
            "maxPoints": 4,
            "details": "No sitemap found via robots.txt or /sitemap.xml.",
            "fix": "Generate an XML sitemap and reference it from robots.txt with a Sitemap: line."
        },
        {
            "id": "og_tags",
            "category": "social",
            "label": "Open Graph tags present",
            "status": "warn",
            "points": 0,
            "maxPoints": 6,
            "details": "No og: tags found.",
            "fix": "Add og:title, og:description, og:image and og:type so shared links render properly."
        },
        {
            "id": "twitter_card",
            "category": "social",
            "label": "Twitter card declared",
            "status": "warn",
            "points": 0,
            "maxPoints": 3,
            "details": "No twitter:card meta found.",
            "fix": "Add <meta name=\"twitter:card\" content=\"summary_large_image\">."
        },
        {
            "id": "jsonld_present",
            "category": "social",
            "label": "JSON-LD structured data present",
            "status": "warn",
            "points": 0,
            "maxPoints": 7,
            "details": "No JSON-LD structured data found.",
            "fix": "Add JSON-LD structured data (e.g. Article, Product, WebPage) describing the page entity."
        },
        {
            "id": "jsonld_valid",
            "category": "social",
            "label": "JSON-LD parses as valid JSON",
            "status": "warn",
            "points": 0,
            "maxPoints": 4,
            "details": "No JSON-LD to validate.",
            "fix": "Fix the JSON-LD syntax so search engines and AI systems can parse it."
        }
    ],
    "geo": {
        "score": 40,
        "aiCrawlerAccess": {
            "GPTBot": "allowed",
            "ClaudeBot": "allowed",
            "PerplexityBot": "allowed",
            "Google-Extended": "allowed",
            "CCBot": "allowed"
        },
        "llmsTxt": false,
        "checks": [
            {
                "id": "llms_txt",
                "label": "llms.txt present for AI systems",
                "status": "warn",
                "points": 0,
                "maxPoints": 25,
                "details": "No llms.txt at the origin root.",
                "fix": "Publish an llms.txt that summarises the site and links its key pages for AI systems."
            },
            {
                "id": "ai_crawlers",
                "label": "AI crawlers allowed in robots.txt",
                "status": "pass",
                "points": 30,
                "maxPoints": 30,
                "details": "GPTBot: allowed; ClaudeBot: allowed; PerplexityBot: allowed; Google-Extended: allowed; CCBot: allowed.",
                "fix": null
            },
            {
                "id": "geo_structured_data",
                "label": "Structured data available to AI/search parsers",
                "status": "fail",
                "points": 0,
                "maxPoints": 15,
                "details": "No JSON-LD found.",
                "fix": "Add valid JSON-LD describing the page entity so AI systems can cite it accurately."
            },
            {
                "id": "geo_metadata",
                "label": "Title and description complete for citation snippets",
                "status": "warn",
                "points": 5,
                "maxPoints": 10,
                "details": "Title: present; description: missing.",
                "fix": "Complete the title and meta description; AI answers quote them when citing pages."
            },
            {
                "id": "geo_server_rendered",
                "label": "Content readable without JavaScript (>= 300 words raw HTML)",
                "status": "fail",
                "points": 0,
                "maxPoints": 10,
                "details": "27 words in raw HTML."
            }
        ]
    },
    "_note": "Response truncated for documentation purposes"
}
审核一页 — 代码片段

curl --location --request GET 'https://zylalabs.com/api/14801/seoscore+api/38378/audit+one+page?url=https://example.com' --header 'Authorization: Bearer YOUR_API_KEY' 


    
请求
JSON主体 {"urls": ["...", ...]}, 最多25个URL; 返回每个URL的审计对象以及摘要 {total, succeeded, failed, averageScore, averageGeoScore}. 错误名称为: MISSING_URLS, EMPTY_BATCH, BATCH_TOO_LARGE
Endpoint ID: 38380
POST https://zylalabs.com/api/14801/seoscore+api/38380/batch+audit
输入参数

批量审核 — 端点功能

对象 描述
请求体 必需 Json

剩余免费测试请求:3 / 3。


输入参数

API 示例响应
JSON
{
    "results": [
        {
            "url": "https://example.com/",
            "finalUrl": "https://example.com/",
            "ok": true,
            "score": 29,
            "maxScore": 100,
            "grade": "F",
            "geoScore": 40,
            "statusCode": 200,
            "responseTimeMs": 17,
            "pageBytes": 577,
            "truncated": false,
            "checks": [
                {
                    "id": "title_present",
                    "category": "meta",
                    "label": "Title tag present",
                    "status": "pass",
                    "points": 8,
                    "maxPoints": 8,
                    "details": "Title: \"Example Domain\"",
                    "fix": null
                },
                {
                    "id": "title_length",
                    "category": "meta",
                    "label": "Title length 30-60 chars",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 4,
                    "details": "Title is 14 characters.",
                    "fix": "Rewrite the title to 30-60 characters so it is not truncated in search results."
                },
                {
                    "id": "description_present",
                    "category": "meta",
                    "label": "Meta description present",
                    "status": "fail",
                    "points": 0,
                    "maxPoints": 8,
                    "details": "No meta description found.",
                    "fix": "Add a meta description of 70-160 characters summarising the page."
                },
                {
                    "id": "description_length",
                    "category": "meta",
                    "label": "Description length 70-160 chars",
                    "status": "fail",
                    "points": 0,
                    "maxPoints": 4,
                    "details": "No description to measure.",
                    "fix": "Adjust the meta description to 70-160 characters."
                },
                {
                    "id": "canonical_present",
                    "category": "meta",
                    "label": "Canonical URL declared",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 3,
                    "details": "No rel=canonical link found.",
                    "fix": "Add <link rel=\"canonical\"> pointing at the preferred URL for this page."
                },
                {
                    "id": "viewport_present",
                    "category": "meta",
                    "label": "Viewport meta present (mobile)",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 3,
                    "details": "No viewport meta found.",
                    "fix": "Add <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">."
                },
                {
                    "id": "h1_single",
                    "category": "content",
                    "label": "Exactly one H1 heading",
                    "status": "fail",
                    "points": 0,
                    "maxPoints": 8,
                    "details": "No H1 found.",
                    "fix": "Use exactly one H1 that states the page's main topic."
                },
                {
                    "id": "h2_present",
                    "category": "content",
                    "label": "H2 subheadings present",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 4,
                    "details": "0 H2 heading(s) found.",
                    "fix": "Structure the page with H2 subheadings for each main section."
                },
                {
                    "id": "word_count",
                    "category": "content",
                    "label": "At least 300 words of visible text",
                    "status": "fail",
                    "points": 0,
                    "maxPoints": 6,
                    "details": "27 words of visible text.",
                    "fix": "Expand the page copy to at least 300 words of substantive, server-rendered text."
                },
                {
                    "id": "image_alt",
                    "category": "content",
                    "label": "Image alt text coverage >= 80%",
                    "status": "pass",
                    "points": 4,
                    "maxPoints": 4,
                    "details": "No <img> tags on the page.",
                    "fix": null
                },
                {
                    "id": "lang_present",
                    "category": "content",
                    "label": "html lang attribute present",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 3,
                    "details": "No lang attribute on <html>.",
                    "fix": "Add a lang attribute to the <html> tag, e.g. <html lang=\"en\">."
                },
                {
                    "id": "https",
                    "category": "technical",
                    "label": "Served over HTTPS",
                    "status": "pass",
                    "points": 6,
                    "maxPoints": 6,
                    "details": "Final URL: https://example.com/",
                    "fix": null
                },
                {
                    "id": "status_200",
                    "category": "technical",
                    "label": "HTTP status 200",
                    "status": "pass",
                    "points": 6,
                    "maxPoints": 6,
                    "details": "Status: 200",
                    "fix": null
                },
                {
                    "id": "indexable",
                    "category": "technical",
                    "label": "Page is indexable (no noindex)",
                    "status": "pass",
                    "points": 5,
                    "maxPoints": 5,
                    "details": "No noindex directive; Googlebot allowed.",
                    "fix": null
                },
                {
                    "id": "robots_txt",
                    "category": "technical",
                    "label": "robots.txt present",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 4,
                    "details": "No robots.txt at the origin root.",
                    "fix": "Publish a robots.txt at the site root with your crawl rules and sitemap location."
                },
                {
                    "id": "sitemap",
                    "category": "technical",
                    "label": "XML sitemap discoverable",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 4,
                    "details": "No sitemap found via robots.txt or /sitemap.xml.",
                    "fix": "Generate an XML sitemap and reference it from robots.txt with a Sitemap: line."
                },
                {
                    "id": "og_tags",
                    "category": "social",
                    "label": "Open Graph tags present",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 6,
                    "details": "No og: tags found.",
                    "fix": "Add og:title, og:description, og:image and og:type so shared links render properly."
                },
                {
                    "id": "twitter_card",
                    "category": "social",
                    "label": "Twitter card declared",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 3,
                    "details": "No twitter:card meta found.",
                    "fix": "Add <meta name=\"twitter:card\" content=\"summary_large_image\">."
                },
                {
                    "id": "jsonld_present",
                    "category": "social",
                    "label": "JSON-LD structured data present",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 7,
                    "details": "No JSON-LD structured data found.",
                    "fix": "Add JSON-LD structured data (e.g. Article, Product, WebPage) describing the page entity."
                },
                {
                    "id": "jsonld_valid",
                    "category": "social",
                    "label": "JSON-LD parses as valid JSON",
                    "status": "warn",
                    "points": 0,
                    "maxPoints": 4,
                    "details": "No JSON-LD to validate.",
                    "fix": "Fix the JSON-LD syntax so search engines and AI systems can parse it."
                }
            ],
            "geo": {
                "score": 40,
                "aiCrawlerAccess": {
                    "GPTBot": "allowed",
                    "ClaudeBot": "allowed",
                    "PerplexityBot": "allowed",
                    "Google-Extended": "allowed",
                    "CCBot": "allowed"
                },
                "llmsTxt": false,
                "checks": [
                    {
                        "id": "llms_txt"
                    }
                ]
            }
        }
    ],
    "_note": "Response truncated for documentation purposes"
}
批量审核 — 代码片段

curl --location --request POST 'https://zylalabs.com/api/14801/seoscore+api/38380/batch+audit' --header 'Authorization: Bearer YOUR_API_KEY' 

--data-raw '{"urls": ["https://example.com/", "https://www.iana.org/"]}'

    

API 访问密钥和身份验证

注册后,每个开发者都会被分配一个个人 API 访问密钥,这是一个唯一的字母和数字组合,用于访问我们的 API 端点。要使用 SEO评分 API 进行身份验证,只需在 Authorization 标头中包含您的 bearer token。

标头
标头 描述
授权 必需 应为 Bearer access_key. 订阅后,请查看上方的"您的 API 访问密钥"。

无长期承诺。随时升级、降级或取消。

起价
$10,000/年


  • 自定义数量
  • 自定义速率限制
  • 专业客户支持
  • 实时 API 监控

概览

SEO审核API具有确定性的0-100分 每次检查的证据 准备好的修复列表以及用于AI搜索可见性的地理分数

SEO评分 API FAQs

因为分数完全是基于获取的HTML、状态和头部的规则 排除时间是故意的 如果分数发生变化 页面(或其robots.txt / llms.txt)发生了变化

对两者都不是。它准确地审计原始HTML,就像大多数爬虫首次看到的那样,并且报告仅涵盖页面和技术信号 - 没有虚构的反向链接、排名或实验室指标

最多25 每批调用返回每个URL的结果和摘要在一个响应中 更大的列表应分批调用

该页面对AI搜索的可见性:llms.txt是否存在,robots.txt是否允许GPTBot ClaudeBot PerplexityBot Google-Extended和CCBot,是否存在有效的JSON-LD结构化数据,标题和描述是否完整到足以被AI答案引用,内容是否可以在没有JavaScript的情况下可读,是否通过HTTPS提供了规范URL

不 私有地址 回环地址和链接本地地址被拒绝 审计只覆盖公共页面 并且最多读取512 KB的页面

一般常见问题

Zyla API Hub 就像一个大型 API 商店,您可以在一个地方找到数千个 API。我们还为所有 API 提供专门支持和实时监控。注册后,您可以选择要使用的 API。请记住,每个 API 都需要自己的订阅。但如果您订阅多个 API,您将为所有这些 API 使用相同的密钥,使事情变得更简单。
价格以 USD(美元)、EUR(欧元)、CAD(加元)、AUD(澳元)和 GBP(英镑)列出。我们接受所有主要的借记卡和信用卡。我们的支付系统使用最新的安全技术,由 Stripe 提供支持,Stripe 是世界上最可靠的支付公司之一。如果您在使用卡片付款时遇到任何问题,请通过 [email protected]

此外,如果您已经以这些货币中的任何一种(USD、EUR、CAD、AUD、GBP)拥有有效订阅,该货币将保留用于后续订阅。只要您没有任何有效订阅,您可以随时更改货币。
定价页面上显示的本地货币基于您 IP 地址的国家/地区,仅供参考。实际价格以 USD(美元)为单位。当您付款时,即使您在我们的网站上看到以本地货币显示的等值金额,您的卡片对账单上也会以美元显示费用。这意味着您不能直接使用本地货币付款。
有时,银行可能会因其欺诈保护设置而拒绝收费。我们建议您首先联系您的银行,检查他们是否阻止了我们的收费。此外,您可以访问账单门户并更改关联的卡片以进行付款。如果这些方法不起作用并且您需要进一步帮助,请通过 [email protected]
价格由月度或年度订阅决定,具体取决于所选计划。
API 调用根据成功请求从您的计划中扣除。每个计划都包含您每月可以进行的特定数量的调用。只有成功的调用(由状态 200 响应指示)才会计入您的总数。这确保失败或不完整的请求不会影响您的月度配额。
Zyla API Hub 采用月度订阅系统。您的计费周期将从您购买付费计划的那一天开始,并在下个月的同一日期续订。因此,如果您想避免未来的费用,请提前取消订阅。
要升级您当前的订阅计划,只需转到 API 的定价页面并选择您要升级到的计划。升级将立即生效,让您立即享受新计划的功能。请注意,您之前计划中的任何剩余调用都不会转移到新计划,因此在升级时请注意这一点。您将被收取新计划的全部金额。
要检查您本月剩余多少 API 调用,请参考响应标头中的 "X-Zyla-API-Calls-Monthly-Remaining" 字段。例如,如果您的计划允许每月 1,000 个请求,而您已使用 100 个,则响应标头中的此字段将显示 900 个剩余调用。
要查看您的计划允许的最大 API 请求数,请检查 "X-Zyla-RateLimit-Limit" 响应标头。例如,如果您的计划包括每月 1,000 个请求,此标头将显示 1,000。
"X-Zyla-RateLimit-Reset" 标头显示您的速率限制重置之前的秒数。这告诉您何时您的请求计数将重新开始。例如,如果它显示 3,600,则意味着还有 3,600 秒直到限制重置。
是的,您可以随时通过访问您的账户并在账单页面上选择取消选项来取消您的计划。请注意,升级、降级和取消会立即生效。此外,取消后,您将不再有权访问该服务,即使您的配额中还有剩余调用。
为了让您有机会在没有任何承诺的情况下体验我们的 API,我们提供 7 天免费试用,允许您免费进行最多 50 次 API 调用。此试用只能使用一次,因此我们建议将其应用于您最感兴趣的 API。虽然我们的大多数 API 都提供免费试用,但有些可能不提供。试用在 7 天后或您进行了 50 次请求后结束,以先发生者为准。如果您在试用期间达到 50 次请求限制,您需要"开始您的付费计划"以继续发出请求。您可以在个人资料中的订阅 -> 选择您订阅的 API -> 定价标签下找到"开始您的付费计划"按钮。或者,如果您在第 7 天之前不取消订阅,您的免费试用将结束,您的计划将自动计费,授予您访问计划中指定的所有 API 调用的权限。请记住这一点以避免不必要的费用。
7 天后,您将被收取试用期间订阅的计划的全额费用。因此,在试用期结束前取消很重要。因忘记及时取消而提出的退款请求不被接受。
当您订阅 API 免费试用时,您可以进行最多 50 次 API 调用。如果您希望超出此限制进行额外的 API 调用,API 将提示您执行"开始您的付费计划"。您可以在个人资料中的订阅 -> 选择您订阅的 API -> 定价标签下找到"开始您的付费计划"按钮。
付款订单在每月 20 日至 30 日之间处理。如果您在 20 日之前提交请求,您的付款将在此时间范围内处理。
您可以通过我们的聊天渠道联系我们以获得即时帮助。我们始终在线,时间为上午 8 点至下午 5 点(EST)。如果您在该时间之后联系我们,我们将尽快回复您。此外,您可以通过 [email protected]

相关 API