Audit a URL
Fetch any public URL and get the most comprehensive free on-page SEO audit available in one API call — a 0–100 score, a grade, a prioritised list of issues, and the detail behind 100+ on-page checks. Alongside the standard signals (title, meta, headings, images, canonical, structured data, links and content) it also returns readability scores (Flesch, Flesch–Kincaid, Gunning Fog, SMOG and more), keyword density (top words and phrases), tech-stack detection (CMS, framework, analytics, CDN), schema.org validation (missing required/recommended fields), accessibility checks (unlabelled forms, ARIA landmarks, skip-nav), social profile links and RSS/Atom feeds, document/meta validity, deprecated/legacy markup, internationalisation (hreflang, x-default, AMP), render-blocking resource counts, text-to-HTML ratio, lorem-ipsum detection and SEO-friendly-URL analysis. Everything the on-site browser tool returns, plus more, in a single live request — JSON response, no crawl task to manage.
Query parameters
| Name | Type | Description |
|---|---|---|
url required | string | The page to audit. Bare domains (example.com) default to https://. |
key optional | string | Your API key, if not sent as the X-API-Key header. |
Request
Response
- {
- "url": "https://example.com",
- "score": 68,
- "grade": "C",
- "issueCount": 7,
- "issues": ["Title tag is short (<30 chars)", "Missing meta description", "No favicon"],
- "checks": {
- "title": { "value": "Example Domain", "length": 14, "count": 1 },
- "metaDescription": { "value": "", "length": 0, "count": 0 },
- "headings": {
- "h1": ["Example Domain"], "h2": [],
- "h1Count": 1, "h2Count": 0, "h3Count": 0, "h4Count": 0, "h5Count": 0, "h6Count": 0
- },
- "images": {
- "count": 0, "missingAlt": 0, "missingTitle": 0,
- "withoutDimensions": 0, "withLazy": 0, "withoutLazy": 0
- },
- "canonical": { "value": "", "present": false },
- "openGraph": { "count": 0, "hasTitle": false, "hasImage": false },
- "structuredData": { "count": 0, "types": [] },
- "technical": { "lang": "en", "viewport": true, "charset": false, "robots": "", "noindex": false },
- "https": true,
- "links": {
- "internal": 0, "external": 1, "total": 1,
- "nofollowCount": 0, "nofollowRatio": 0, "emptyLinks": 0
- },
- "content": { "wordCount": 17 },
- "meta": {
- "doctype": true, "favicon": false, "charset": null, "generator": null, "author": null,
- "metaKeywords": [], "metaRefreshRedirect": false, "doctypeType": "HTML5"
- },
- "markup": {
- "deprecatedTags": {}, "deprecatedTagCount": 0,
- "hasFrames": false, "hasFlash": false, "iframeCount": 0
- },
- "i18n": { "hreflangCount": 0, "hreflangs": [], "hasXDefault": false, "amp": false },
- "social": { "openGraphCount": 0, "twitterCardCount": 0, "hasTwitterCard": false },
- "performanceHints": {
- "renderBlockingScripts": 0, "renderBlockingStylesheets": 0,
- "inlineStyleTags": 1, "inlineScriptTags": 0
- },
- "url": { "seoFriendly": true, "issues": [] },
- "textToHtmlRatio": 24,
- "readability": {
- "fleschReadingEase": 14, "level": "Very Difficult", "fleschKincaidGrade": 13.4,
- "automatedReadabilityIndex": 12.5, "colemanLiauIndex": 17.7, "gunningFog": 17.5,
- "smogIndex": 13, "sentenceCount": 2, "avgWordsPerSentence": 8.5, "avgSyllablesPerWord": 2.2
- },
- "files": { "cssFiles": 0, "jsFiles": 0, "inlineScripts": 0 },
- "accessibility": {
- "formsWithoutLabels": 0, "imagesInLinksWithoutAlt": 0,
- "hasSkipNav": false, "ariaLandmarks": 0
- },
- "socialLinks": [
- // { "name": "twitter", "url": "https://twitter.com/example" }, …
- ],
- "feeds": [
- // { "type": "rss", "href": "https://example.com/feed", "title": "Example Feed" }, …
- ],
- "techStack": [
- // { "name": "WordPress", "category": "cms" }, { "name": "Google Analytics", "category": "analytics" }, …
- ],
- "loremIpsum": { "found": false, "count": 0, "inMeta": false },
- "schemaValidation": [
- // { "type": "Product", "errors": ["missing required field: name"], "warnings": ["recommended: brand"] }, …
- ],
- "keywords": {
- "totalWords": 12,
- "top": [
- { "word": "use", "count": 2, "density": 16.7 },
- { "word": "example", "count": 1, "density": 8.3 }
- // …
- ],
- "phrases": [
- // { "phrase": "illustrative examples", "count": 2 }, …
- ]
- }
- },
- "usage": { "used": 7, "dailyLimit": 100, "tier": "free" }
- }
Response fields
Every signal the RankNibbler on-page checker computes is returned — nothing trimmed. The checks object groups them as follows:
| Field | Type | Description |
|---|---|---|
score / grade | integer / string | Overall on-page score (0–100) and letter grade (A–F). |
issues | string[] | Human-readable issues, ordered by impact. |
checks.title / metaDescription | object | Value, length and tag count. |
checks.headings | object | H1 text plus H1/H2/H3 counts. |
checks.images | object | Total, missing alt text, missing title, missing width/height dimensions, and lazy-loaded vs non-lazy counts. |
checks.canonical | object | Canonical URL, presence and whether it's self-referencing. |
checks.openGraph / twitterCard | object | Social meta coverage. |
checks.structuredData | object | JSON-LD block count and schema types. |
checks.hreflang | object | hreflang annotations and target languages. |
checks.technical | object | Lang, viewport, charset, robots, noindex, favicon, doctype. |
checks.https | boolean | Whether the page is served over HTTPS. |
checks.links | object | Internal, external and total link counts, plus nofollow count, nofollow ratio and empty (no-href/empty-anchor) link count. |
checks.content | object | On-page word count. |
checks.textToHtmlRatio | number | Visible-text to HTML ratio, as a percentage — a low ratio flags bloated markup. |
checks.readability | object | Readability scores: Flesch Reading Ease and human level, Flesch–Kincaid grade, Automated Readability Index, Coleman–Liau, Gunning Fog, SMOG, plus sentence count and average words/syllables per sentence. |
checks.keywords | object | Keyword density: totalWords, top words (with count and density %) and multi-word phrases. |
checks.files | object | Resource counts: external CSS files, external JS files and inline scripts. |
checks.accessibility | object | Accessibility checks: forms without labels, images-in-links without alt, skip-nav presence and ARIA landmark count. |
checks.socialLinks | array | Detected social profile links — { name, url } per platform. |
checks.feeds | array | Discovered RSS/Atom feeds — { type, href, title }. |
checks.techStack | array | Detected technologies — { name, category } across CMS, framework, analytics and CDN. |
checks.schemaValidation | array | schema.org validation per JSON-LD type — { type, errors, warnings } listing missing required and recommended fields. |
checks.loremIpsum | object | Placeholder-text detection: whether lorem-ipsum was found, occurrence count, and whether it appears in meta tags. |
checks.meta | object | Document/meta validity: doctype presence, favicon, declared charset, generator tag, meta keywords, and meta-refresh redirects. |
checks.markup | object | Deprecated/legacy markup: <font>/<center>/<marquee> and similar tag counts, plus frames, Flash and iframe usage. |
checks.i18n | object | Internationalisation: hreflang annotation count and targets, x-default presence, and AMP detection. |
checks.social | object | Social tag coverage: Open Graph tag count plus Twitter Card count and presence. |
checks.performanceHints | object | Render-blocking resource counts: blocking scripts and stylesheets, plus inline style and script tag counts. |
checks.url | object | SEO-friendly-URL analysis: whether the URL is clean and a list of any issues found. |
usage | object | Your current daily usage and limit. |
Only public URLs are supported — private/internal addresses are blocked (403). Errors return { "error": "…" }; see Errors.