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.
| Field | Type | Default | Description |
|---|---|---|---|
url required | string | Page URL. A bare domain such as example.com is accepted (https is assumed). Private, local and cloud-metadata addresses are refused on every redirect. | |
checkLinks | integer | 0 | Also check the HTTP status of up to this many links on the page (unique, internal first), following redirects. 0 = no link checks (fastest). |
linkScope | string | "all" | Which links checkLinks picks: all (internal first), internal or external. |
siteChecks | boolean | true | Read robots.txt (Googlebot verdict), look for a sitemap and check the canonical target's status. false = the page only. |
includeLinks | boolean | false | Also return the list of links on the page (up to 500). |
render | string | "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. |
timeoutMs | integer | 15000 | Page-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).