Single-Page SEO + AI Audit API (v3)
This API audits a single web page and returns an SEO + technical + security + accessibility + AI-readiness report in JSON. It is designed for fast, lightweight checks (no crawling).
Base URL
https://vebapi.com/api
Endpoint
GET /seo/page-audit/v2
Authentication
Send your API key in the header:
X-API-KEY: YOUR_API_KEY
Request
Query parameters
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
url |
string (URL) | Yes | — | Full URL to audit. Must include http:// or https://. |
https://vebapi.com/ |
timeout_ms |
integer | No | 10000 | Maximum time allowed for the fetch + analysis. | 12000 |
user_agent |
string | No | VebAPI-AuditBot | Custom User-Agent for the request (useful for testing). | Mozilla/5.0 ... |
follow_redirects |
boolean | No | true | Follow redirects to get final URL and status. | true |
max_links_sample |
integer | No | 30 | Number of links to include in links.sample. |
50 |
max_images_sample |
integer | No | 30 | Number of images to include in images.sample. |
50 |
Headers
| Header | Required | Description | Example |
|---|---|---|---|
X-API-KEY |
Yes | Your API key. | 1f41efcd-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
Accept |
No | Response format. Use JSON. | application/json |
cURL Example
curl -X GET "https://vebapi.com/api/seo/page-audit/v2?url=https%3A%2F%2Fvebapi.com%2F" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Accept: application/json"
Response
The response is JSON with these main sections:
summary— overall score, grade, top issuesscores— bucket scores + weights usedbasic— URL, status, title, canonical, faviconmeta— engine info, runtime, timestampsheadings— counts and samples for H1..H6links— internal/external counts and samplesimages— format breakdown and ALT coverageresources— scripts and styles detectedstructured_data— JSON-LD detection summarycontent— word count, ratio, paragraph statsperformance— TTFB, timings, caching hintssecurity— headers + mixed content + suggestionscrawl_signals— robots/sitemap/llms.txt checksaccessibility— basic accessibility signalstechnology— detected stack heuristicshosting— IP, nameservers, IPv6, rDNSlegal_pages— privacy/terms/cookie/refund/GDPR detectionraw— timings, response headers, byte sizesfindings— normalized issues list with severity + fix
Response fields (detailed)
summary
| Field | Type | Description | Example |
|---|---|---|---|
summary.overall_score |
integer (0–100) | Final overall score. | 87 |
summary.grade |
string | Letter grade derived from score. | B |
summary.priority_issues |
array<string> | Short list of highest-impact issues. | ["Canonical tag missing.", "No JSON-LD schema found."] |
scores
| Field | Type | Description | Example |
|---|---|---|---|
scores.overall |
integer | Overall score. | 87 |
scores.buckets |
object | Bucket scores used to compute overall score. | {"performance":85,"technical":70,"onpage":85,"security":100} |
scores.weights |
object | Weights applied to buckets (sum ≈ 100). | {"technical":25,"onpage":25,"performance":15} |
basic
| Field | Type | Description | Example |
|---|---|---|---|
basic.requested_url |
string | URL provided by the user. | https://vebapi.com/ |
basic.final_url |
string | Final URL after redirects (if enabled). | https://vebapi.com/ |
basic.http_code |
integer | HTTP status code for the final URL. | 200 |
basic.title |
string|null | HTML title tag text. | VebAPI – All-in-One SEO API for Developers & SaaS |
basic.favicon |
string|null | Detected favicon URL. | https://vebapi.com/1favicon.png |
basic.canonical |
string|null | Canonical URL from <link rel="canonical">. |
null |
meta
| Field | Type | Description | Example |
|---|---|---|---|
meta.generated_at_utc |
string (ISO 8601) | Time audit was generated (UTC). | 2026-02-14T01:33:17+00:00 |
meta.duration_ms |
integer | Total analysis duration in milliseconds. | 4038 |
meta.engine |
string | Audit engine identifier. | single-page-seo-ai-audit-v3 |
meta.server |
string | Processing region. | Europe |
meta.handler |
string | Internal handler name. | Vebapi.com |
headings
| Section | Field | Type | Description |
|---|---|---|---|
| Counts | headings.counts |
object | Count of H1..H6 tags. |
| Data | headings.data |
object | Arrays of texts for each heading level (sampled). |
| Hierarchy | headings.hierarchy |
object | Checks if the heading order looks valid and lists issues if not. |
links
| Field | Type | Description |
|---|---|---|
links.counts |
object | Totals for internal/external/nofollow/empty anchors etc. |
links.empty_anchors |
array<string> | List of URLs where anchor text is empty. |
links.sample |
array<object> | Sample of links with href, absolute URL, text, rel, and internal flag. |
links.health_sample |
object | Optional link health sampling (broken estimate + results). |
images
| Field | Type | Description |
|---|---|---|
images.counts.total |
integer | Total images detected on the page. |
images.alt.coverage_pct |
integer | ALT coverage percentage across images. |
images.formats |
object | Image format breakdown (png/jpg/webp/etc.). |
images.sample |
array<object> | Sample list of images with src, absolute URL, alt, loading, format. |
resources
| Section | Field | Type | Description |
|---|---|---|---|
| Scripts | resources.scripts |
object | Script count, blocking count, and list of detected scripts with async/defer. |
| Styles | resources.styles |
object | Stylesheet count and list of detected CSS resources. |
structured_data
| Field | Type | Description |
|---|---|---|
structured_data.jsonld_count |
integer | How many JSON-LD blocks were found. |
structured_data.detected_types |
array<string> | Schema types found (Organization, FAQPage, etc.). |
structured_data.items |
array<object> | Parsed JSON-LD objects (if exposed). |
performance
| Field | Type | Description |
|---|---|---|
performance.ttfb_seconds |
number | Estimated time to first byte. |
performance.total_time_seconds |
number | Total fetch time (network-level), not full browser load. |
performance.cache_control |
string|null | Cache-Control header value (if available). |
performance.suggestions |
array<string> | High-level performance suggestions. |
security
| Field | Type | Description |
|---|---|---|
security.https |
boolean | Whether HTTPS is used. |
security.hsts |
boolean | Whether HSTS header is present. |
security.mixed_content_found |
boolean | True if any http:// resources are detected on https:// pages. |
security.suggestions |
array<string> | Recommended header fixes and hardening steps. |
crawl_signals
| Section | Fields | Description |
|---|---|---|
robots |
url, found, mentions_sitemap, ai_bots |
robots.txt discovery + AI bot rule summary (if parsed). |
sitemap |
url, found, http_code |
Sitemap XML presence check. |
llms_txt |
url, found, notes |
Checks if /llms.txt exists for AI indexing/readiness. |
ai_txt |
url, found |
Checks if /ai.txt exists. |
legal_pages
| Policy | Fields | Description | Example |
|---|---|---|---|
| Privacy Policy | found, url, match |
Detects privacy policy link based on common keywords. | {"found":true,"url":"https://vebapi.com/privacy"} |
| Terms | found, url, match |
Detects terms/conditions link. | {"found":true,"url":"https://vebapi.com/terms"} |
| Refund / Cookie / GDPR | found, url |
Checks for common legal pages if present. | {"found":false,"url":null} |
findings
findings is a normalized list of issues and notes. Each entry contains a category, severity, issue message, and a suggested fix.
| Field | Type | Description | Example |
|---|---|---|---|
findings[].category |
string | Issue group (title, canonical, structured_data, performance, etc.). | canonical |
findings[].severity |
string | good | warning | critical (if used) |
warning |
findings[].issue |
string | Human-readable issue summary. | Canonical tag missing. |
findings[].fix |
string | Recommended action to fix/improve. | Add <link rel="canonical" href="..."> |
HTTP Status Codes
| Status | Meaning | Typical reasons |
|---|---|---|
200 |
OK | Audit completed successfully. |
400 |
Bad Request | Missing/invalid url parameter. |
401 |
Unauthorized | Missing/invalid API key. |
402 |
Payment Required | No credits / plan limits reached (if enforced). |
429 |
Too Many Requests | Rate limit exceeded. |
500 |
Server Error | Unexpected error during fetch/parse/analyze. |
Error Response Format
{
"error": {
"message": "Missing url parameter",
"code": "BAD_REQUEST"
}
}