Overview
SEO Validator works by fetching and parsing a web page, then evaluating its on-page SEO signals — title, meta description, H1 structure, canonical link, mobile viewport, image alt text and external-link rel attributes. It returns each check as a structured field, a list of issues to fix, and a weighted 0-100 score with an A–F grade so you can gauge a page's SEO health at a glance.
Live Test SEO Validation Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as SEOValidationSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "SEOValidationSkill",
"arguments": {
"url": "https://www.example.com"
}
}You do not name the tool yourself; the model picks it. Asking about https://www.example.com in the terms this skill covers is enough for it to reach for SEOValidationSkill on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
urlRequired | string | The URL of the web page to validate the SEO metrics of url |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"url": "https://apiverve.com",
"passed": false,
"issueCount": 6,
"issues": [
"Image missing 'alt' attribute: '/assets/img/hero-diagram.png'",
"Image missing 'alt' attribute: '/assets/img/logo-mark.svg'",
"External link missing 'rel' attribute: 'https://twitter.com/apiverve'",
"External link missing 'rel' attribute: 'https://github.com/apiverve'",
"External link missing 'rel' attribute: 'https://status.apiverve.com'",
"Missing meta 'keywords' tag in head"
],
"checks": {
"hasTitle": true,
"titleLength": 54,
"hasMetaDescription": true,
"metaDescriptionLength": 158,
"hasMetaKeywords": false,
"h1Count": 1,
"hasCanonical": true,
"hasViewport": true,
"imagesTotal": 8,
"imagesMissingAlt": 2,
"externalLinksTotal": 10,
"externalLinksMissingRel": 3
},
"seoScore": 93,
"grade": "A"
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
url | string | https://apiverve.com | The validated URL that was analyzed for SEO issues |
passed | boolean | false | Whether the URL passed all SEO validation checks |
issueCount | number | 6 | Total number of SEO issues found on the page |
issues | array | ["Image missing 'alt' attribute: '/assets/img/hero-diagram.png'","Image missing 'alt' attribute: '/assets/img/logo-mark.svg'","External link missing 'rel' attribute: 'https://twitter.com/apiverve'"] | Array of SEO issues found (missing alt tags, missing meta tags, multiple H1s, etc.) |
checks | object | {…} | Structured per-rule breakdown of the on-page SEO signals behind the issue list, exposed as booleans, counts and lengths |
checks.hasTitle | boolean | true | Whether the page has a non-empty <title> tag in the head |
checks.titleLength | number | 54 | Character length of the title (null when absent); ~50-60 characters is the common recommendation |
checks.hasMetaDescription | boolean | true | Whether the page has a meta description tag |
checks.metaDescriptionLength | number | 158 | Character length of the meta description (null when absent); ~150-160 characters is the common recommendation |
checks.hasMetaKeywords | boolean | false | Whether a meta keywords tag is present (largely deprecated for ranking) |
checks.h1Count | number | 1 | Number of H1 tags on the page; exactly one is recommended |
checks.hasCanonical | boolean | true | Whether the page declares a canonical link tag |
checks.hasViewport | boolean | true | Whether the page declares a mobile viewport meta tag |
checks.imagesTotal | number | 8 | Total number of <img> elements on the page |
checks.imagesMissingAlt | number | 2 | Number of images missing an alt attribute |
checks.externalLinksTotal | number | 10 | Total number of external (http/https) links on the page |
checks.externalLinksMissingRel | number | 3 | Number of external links missing a rel attribute |
seoScorePremium | number | 93 | Composite 0-100 on-page SEO health score, weighted by real ranking impact (title, meta description and H1 weigh most; image-alt and link-rel penalties scale with the proportion of elements affected). Higher is better |
gradePremium | string | A | Letter grade derived from the score: A (90+), B (80+), C (70+), D (60+) or F |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- CMS Publishing Check
- Before publishing a blog post, CMS editors verify that title tags, meta descriptions, and image alt text meet basic standards.
- Staging Site Audits
- When deploying a site update, QA engineers test generated landing pages to catch missing canonical tags and duplicate H1 headings.
- Agency Client Onboarding
- Marketing agencies inspect client websites to list total issue counts and flag external links lacking security rel attributes.
- Ecommerce Catalog Monitoring
- To keep product catalogs discoverable, ecommerce platforms scan merchant pages to detect missing image descriptions and absent viewport configurations.
Other ways to use SEO Validation Skill
Set up SEO Validation Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Data Validation: