On-page SEO audit and indexability checker
This free on-page SEO audit fetches one URL and runs 12 checks that decide whether the page can rank at all: title and description width in pixels, canonical, noindex in the meta tag or HTTP header, status and redirects, headings, sitemap listing, alt text, structured data and social tags. Each failing check comes with its fix.
- Checks
- 12, pass / needs work / fail
- Also reads
- robots.txt and your sitemap
- Cost
- free, no signup
Twelve checks
Open any check for why it matters and how to fix it
-
Not runTitle tag width—
Why it mattersGoogle truncates titles on pixel width, not characters. Capitals and wide letters such as m and w use up the space faster than a character count suggests, so a 60-character title can still be cut.
How to fixKeep the title between about 180px and 580px. Put the main query and the distinctive words first so a cut, if it happens, removes only the brand.
-
Not runMeta description width—
Why it mattersA missing or very short description leaves Google to pick text from the page. One wider than about 990px is cut off mid-sentence in the results.
How to fixWrite 70 characters or more that answer the query and stay under about 990px. Lead with the answer, not the brand.
-
Not runCanonical tag—
Why it mattersA canonical that points at another URL tells Google to index that URL instead of this one. It looks identical to a self-referencing canonical when you view the page.
How to fixAdd a canonical that points at the page's own final URL, unless you genuinely want another URL indexed in its place.
-
Not runIndexable (no noindex)—
Why it mattersA noindex in the meta robots tag, or in an X-Robots-Tag HTTP header, removes the page from Google. The header version is invisible in view-source, which is why it catches people out.
How to fixRemove the noindex from the template or the server configuration. Check both the HTML and the HTTP response headers.
-
Not runStatus code and redirects—
Why it mattersThe page should answer with 200. Each redirect hop costs crawl budget and slows the fetch. The audit follows up to five hops and lists each one.
How to fixLink to the final URL directly and update internal links, canonicals and the sitemap so no hop is needed.
-
Not runExactly one H1—
Why it mattersOne H1 states what the page is about. None leaves the topic to guesswork; several dilute it.
How to fixKeep one H1 that names the page's subject and demote logo or banner headings to plain text or a lower level.
-
Not runHeading hierarchy—
Why it mattersSkipped levels, such as an H2 followed directly by an H4, make the outline harder for crawlers and screen readers to follow.
How to fixStep down one level at a time. Choose heading levels for structure, and use CSS for size.
-
Not runListed in the sitemap—
Why it mattersA page missing from the sitemap and with few internal links is the kind most likely to be missed. The audit finds your sitemap via robots.txt or the usual paths and checks up to six child sitemaps.
How to fixAdd the final, canonical URL to your XML sitemap and reference the sitemap in robots.txt.
-
Not runImage alt attributes—
Why it mattersImages without an alt attribute give search engines and screen readers nothing to go on. An empty alt is counted as decorative, which is correct for decorative images.
How to fixGive every meaningful image a short alt text that describes it. Use alt="" only for purely decorative images.
-
Not runStructured data—
Why it mattersJSON-LD states facts in a form machines parse without guessing. A block that is not valid JSON is ignored entirely.
How to fixAdd JSON-LD that matches the visible content, then validate it with the Schema Markup Validator.
-
Not runSocial preview tags—
Why it mattersWithout og:image and twitter:card, shared links show a bare URL or a random image from the page.
How to fixAdd og:image (an absolute URL to a 1200 by 630 image is a common choice) and a twitter:card tag.
-
Not runViewport and language—
Why it mattersThe viewport meta makes the page render properly on phones; the html lang attribute declares the language for search engines and assistive technology.
How to fixAdd <meta name="viewport" content="width=device-width, initial-scale=1"> and a lang attribute such as lang="en" on the html element.
What the audit read
Search result preview, pixel widths, redirect chain and heading outline
Nothing to show yet. After an audit, a search result preview with measured title and description widths, the redirect chain and the page's heading outline appear here.
Twelve checks, three states, one score
Each check ends in one of three states. The score is passes plus half of the needs-work results, divided by 12 and shown out of 100. It gives a sense of scale; the individual checks are what you act on.
| Check | Fails when | Needs work when |
|---|---|---|
| Title tag width | No title tag | Wider than about 580px or narrower than about 180px |
| Meta description width | No meta description | Wider than about 990px or under 70 characters |
| Canonical tag | — | Missing, or pointing at another URL |
| Indexable | noindex in meta robots or X-Robots-Tag | — |
| Status and redirects | Final status is not 200 | The URL redirects before reaching 200 |
| Exactly one H1 | No H1, or more than one | — |
| Heading hierarchy | — | A heading level is skipped |
| Listed in the sitemap | — | The URL is not found in the sitemap |
| Image alt attributes | — | Any image lacks an alt attribute |
| Structured data | A JSON-LD block is not valid JSON | No JSON-LD at all |
| Social preview tags | — | og:image or twitter:card missing |
| Viewport and language | — | Viewport meta or html lang missing |
The check found what it expected. Nothing to do. These are prerequisites, not a ranking recipe.
Present but outside the range that works reliably. A 620px title will still rank; it will just be cut. Worth fixing, not urgent.
Something is actively stopping the page from working: a noindex, a missing H1, invalid JSON-LD. Fix these first.
Score bands: 100 is All clear, 75 to 99 is Minor fixes, below 75 is Needs work. The weighting is our judgement; anyone reasonable could weight the checks differently and get a different number from the same page. Pixel widths are close to how Google renders desktop results but not identical, so treat 580px and 990px as guidance rather than a hard cut-off.
Why do pages fail for reasons you cannot see?
Most on-page problems are invisible when you look at a page in a browser. A noindex sent in an X-Robots-Tag header renders nothing and does not appear in view-source, so pages drop out of the index and nobody can find the cause. A canonical pointing at another URL looks identical to one pointing at itself.
Title guidance is usually given in characters, but Google truncates on pixel width, so capitals and wide letters cut earlier than a count suggests. A 612px title is cut in the results; add a canonical pointing elsewhere and the page is both truncated and de-indexed.
And a page can be technically perfect yet still be missed if it is absent from your sitemap and has no internal links pointing at it. Find those gaps with the Internal Link Finder.
How to run and read the audit
One URL at a time. Start with the pages that earn or should earn the most traffic.
-
Step 1
Enter the live URL
Paste the address of a public page. The audit fetches it from our server as an ordinary browser would, follows up to five redirects, then fetches robots.txt and your sitemap.
-
Step 2
Fix the failures first
A fail means something is actively preventing the page from working, such as a noindex, no H1 or invalid JSON-LD. Open each failing row for the exact fix.
-
Step 3
Then weigh the warnings
Needs-work rows are present but outside the reliable range, such as a title that will be truncated. Fix them when you next edit the page.
-
Step 4
Check the details panel
The search result preview shows how the title and description are likely to be cut. The redirect chain lists every hop, and the heading outline shows skipped levels at a glance.
-
Step 5
Re-run after you publish
Make the changes, clear any cache, and audit the same URL again to confirm each check now passes.
What this audit does not measure
Every check here is mechanical. It can tell you a page is technically able to rank. It cannot tell you the page deserves to, and no automated tool can.
It does not measure speed: Core Web Vitals need field data from real visitors, so use PageSpeed Insights for that. For whether a live AI fetch completes in time, use the AI Fetch Timeout Risk Checker.
What the audit does
- Fetches the served HTML of one public URL
- Follows up to five redirects and lists each hop
- Reads meta robots and the X-Robots-Tag header
- Finds your sitemap via robots.txt or common paths and checks this URL is listed
- Checks that every JSON-LD block parses
What it does not do
- Run JavaScript: it sees what a crawler sees before execution
- Measure page speed or Core Web Vitals
- Judge the quality of your content
- Audit more than one URL at a time
- Validate required schema properties (use the Schema Markup Validator)
Need help prioritising the audit findings?
Bring the page and audit findings so we can separate isolated edits from template-wide implementation work.
On-page auditing, answered plainly
Short, standalone answers. Email editorial@moxseo.com if any of them is wrong.
What does this on-page SEO audit check?
It runs 12 checks on one URL: title width, meta description width, canonical tag, noindex in meta robots or the X-Robots-Tag header, final status and redirects, exactly one H1, heading hierarchy, whether the URL is listed in your sitemap, image alt attributes, JSON-LD validity, og:image and twitter:card, and the viewport meta and html lang attribute.
Why measure titles in pixels rather than characters?
Because Google truncates on width. A 60-character title in capitals is wider than a 70-character title in lower case, so a character count tells you very little about whether it will be cut. The audit estimates width with a per-character table and flags titles above about 580px.
My page is indexed but this says noindex. How?
Indexing is not instant, and removal is not either. A page can remain in the index for weeks after a noindex appears. If the audit reports one, in the meta tag or the HTTP header, the page is on its way out.
Does a redirect chain really matter?
For one page, rarely. Across thousands it wastes crawl budget on hops rather than pages. The fix is cheap: link to the final URL directly.
Why does sitemap membership matter if the page is linked?
It usually does not matter much for a well-linked page. It matters most for pages that are new, deep in the structure, or have few internal links, which are exactly the pages most likely to be missed.
How is the score calculated?
Each pass counts as one, each needs-work result as a half and each fail as zero. The total is divided by 12 and shown out of 100. A score of 100 is All clear, 75 to 99 is Minor fixes and anything below 75 is Needs work.
Is a perfect score worth chasing?
No. Fix the failures, consider the warnings, and spend the rest of your time on the content and the links. Structure gets a page eligible to rank, not ranked.
Does the audit run JavaScript?
No. It reads the HTML your server returns. If your content renders entirely in JavaScript, the audit sees what a crawler sees before execution, which is usually exactly the thing worth knowing.
Run the next check
All 24 free tools- Free SEO AuditRun every check on one page at once, graded A to F with prioritised fixes.
- Redirect CheckerFollow every redirect hop and the final status code.
- XML Sitemap ValidatorCheck that your sitemap lists only live, indexable URLs.
- Schema Markup ValidatorCheck required properties on the structured data this audit found.
- Meta Tag GeneratorRewrite a truncated title or description and measure it as you type.
- Internal Link FinderFind pages on the same site that nothing links to.
One URL tells you about one page.
We run it site-wide.
Every finding here has a fix attached, and most are quick. The harder question is which of your pages have these problems, and which are worth fixing first. Book a free 30-minute call with Sakshi Kumari or Ashish Khan to scope it.
A call is not an engagement. We never guarantee rankings.




