Docs · SEO
On-page SEO meta audit
Score a page's SEO meta fields A–F: title, meta description, canonical, H1, Open Graph, robots.
POST
/v1/seo/meta-audit Fetches the page (follows redirects so the final landing page is graded), parses the head with BeautifulSoup, and scores 0–100 across nine criteria: title length 30–60, meta description 120–160, exactly one H1, canonical present, og:image / og:title / og:description, viewport tag, and not-noindex. Returns the raw values plus a flat list of issues for the customer to fix.
Premium residential proxy: pass use_residential_proxy: true to fetch via our partner residential pool — useful for sites that block our default crawler. Bills +3 credits (4 total) per premium call. The response field proxy_used indicates which pool was used.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| url | string | yes | — | Page URL to audit. |
| use_residential_proxy | boolean | no | false | Premium fetch via residential IP pool. Bills +3 credits. Use when the site blocks our default crawler. |
Request
curl -X POST https://api.qcrawl.com/v1/seo/meta-audit \
-H "Authorization: Bearer osk_..." \
-d '{"url": "https://qcrawl.com/architecture/"}' Response
{
"status": "success",
"url": "https://qcrawl.com/architecture/",
"final_url": "https://qcrawl.com/architecture/",
"score": 95,
"grade": "A",
"title": "How Qcrawl is built — architecture, reliability, and operational guarantees",
"title_length": 73,
"meta_description": "A plain-language tour of how Qcrawl serves scraping...",
"meta_description_length": 158,
"h1_count": 1,
"h1_text": "How Qcrawl is built.",
"canonical": "https://qcrawl.com/architecture/",
"robots_directive": null,
"is_indexable": true,
"viewport": "width=device-width,initial-scale=1",
"og_image": "https://qcrawl.com/og-default.png",
"og_title": "How Qcrawl is built",
"og_description": "Subsystems, design principles, and operational guarantees.",
"issues": ["Title is 73 characters; aim for 30–60."]
} Errors
| Code | Meaning |
|---|---|
| 400 | URL blocked by SSRF guard. |
| 500 | Page fetch failed or returned a non-2xx response. |