TidyTools

SEO page audit

POST https://tools.yukai.uk/api/v1/seo/audit

Audit a web page for on-page SEO. Fetches one page and returns a 0-100 score, a grade and a list of issues (severity, stable code, message, fix), plus the details behind them: title and meta description (length and estimated pixel width in Google results), heading outline and H1 checks, canonical (duplicates, conflicts with the HTTP Link header, placement, status of the target), robots meta, googlebot meta and X-Robots-Tag, robots.txt verdict for Googlebot, sitemap presence, hreflang validation, Open Graph and Twitter cards, structured data checked against Google's required and recommended properties, images without alt text, internal/external links (optionally the status of up to 50 of them), word count and readability, speed hints from the HTTP response (HTML size, compression, cache headers, render-blocking resources), mobile viewport, language, charset and mixed content. Deterministic rules only (no AI). Plain HTTP first; a real browser only when the site blocks bots or needs JavaScript. Results are cached for 30 minutes.

Cost

Credits: 45 ($0.0045) per successful call. Failed calls are free. Source price: seo-audit-crawler/page-audited.

Input

Send a JSON body (POST) or the same fields as a query string (GET).

Required: url.

FieldTypeDefaultDescription
url requiredstringPage URL. A bare domain such as example.com is accepted (https is assumed). Private, local and cloud-metadata addresses are refused on every redirect.
checkLinksinteger0Also check the HTTP status of up to this many links on the page (unique, internal first), following redirects. 0 = no link checks (fastest).
linkScopestring"all"Which links checkLinks picks: all (internal first), internal or external.
siteChecksbooleantrueRead robots.txt (Googlebot verdict), look for a sitemap and check the canonical target's status. false = the page only.
includeLinksbooleanfalseAlso return the list of links on the page (up to 500).
renderstring"auto"auto (default): plain HTTP first, a real Chrome browser only when the site blocks plain requests or sends a JavaScript shell with almost no text. never: HTTP only. always: browser only.
timeoutMsinteger15000Page-load timeout in milliseconds.

Examples

Replace tt_live_XXXX with your key from the pricing page.

curl

curl -i -X POST "https://tools.yukai.uk/api/v1/seo/audit" \
  -H "Authorization: Bearer tt_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://vercel.com/"}'

JavaScript (fetch)

const res = await fetch("https://tools.yukai.uk/api/v1/seo/audit", {
  method: "POST",
  headers: { "Authorization": "Bearer tt_live_XXXX", "Content-Type": "application/json" },
  body: JSON.stringify({"url":"https://vercel.com/"}),
});
console.log(res.status, res.headers.get("x-credits-charged"), res.headers.get("x-credits-balance"));
console.log(await res.json());

Python (requests)

import requests

r = requests.post(
    "https://tools.yukai.uk/api/v1/seo/audit",
    headers={"Authorization": "Bearer tt_live_XXXX"},
    json={"url": "https://vercel.com/"},
    timeout=120,
)
print(r.status_code, r.headers.get("x-credits-charged"), r.headers.get("x-credits-balance"))
print(r.json())

Response

JSON with "success": true and the result fields; on failure {"success": false, "error": {"code", "message", "retryable"}} and no credits are used. Every answer carries x-credits-charged (credits used) and x-credits-balance (balance after the call); check the balance any time with GET https://tools.yukai.uk/v1/billing/balance.

Full field list and response schema: OpenAPI spec seo-audit (its servers entry is the marketplace gateway; call https://tools.yukai.uk with your key).

← All routes · Pricing