---
title: On-Page and Indexability Audit
description: Free toolTwelve checks that decide whether a page can rank at allTitles and descriptions measured in pixels rather than characters, because that is how Google t
url: https://moxseo.com/tools/on-page-audit
date_modified: 2026-08-14
author: Admin
language: en_US
---

.mox-op{
  --mox-bg:#fff;
  --mox-panel:#fff;
  --mox-ink:#0e0f12;
  --mox-ink-soft:#525866;
  --mox-line:#e8e8ea;
  --mox-primary:#ff5a1f;
  --mox-primary-d:#e8470a;
  --mox-accent:#ff5a1f;
  --mox-dark:#0b0d12;
  --mox-dark-2:#16181f;
  --mox-good:#16a077;
  --mox-warn:#e8a20c;
  --mox-risk:#e34d5b;
  --mox-r:18px;
  --mox-r-sm:12px;
  --mox-font-d:'Sora',sans-serif;
  --mox-font-b:'Inter',sans-serif;
  --mox-font-m:'IBM Plex Mono',monospace;
  font-family:var(--mox-font-b);
  background:var(--mox-bg);
  color:var(--mox-ink);
  line-height: 1.6;
}
.mox-op *,.mox-op *::before,.mox-op *::after{box-sizing:border-box;margin:0;padding:0}
.mox-op a{text-decoration:none}
.mox-op button{font-family:inherit}
.mox-op .w{max-width:1180px;margin:0 auto;padding:0 22px}
.mox-op .sec{padding:88px 0;transition: background 0.3s ease;}

/* 1. WHITE SECTIONS */
.mox-op .sec--white {
  background: #ffffff !important;
  color: #0e0f12 !important;
  border-top: 1px solid #eef0f3;
  border-bottom: 1px solid #eef0f3;
}
.mox-op .sec--white h1,
.mox-op .sec--white h2,
.mox-op .sec--white h3 {
  color: #0e0f12 !important;
}
.mox-op .sec--white p,
.mox-op .sec--white li,
.mox-op .sec--white .sub,
.mox-op .sec--white .lead {
  color: #525866 !important;
}
.mox-op .sec--white .card {
  background: #ffffff !important;
  border: 1px solid #e2e8f0 !important;
  box-shadow: 0 4px 20px rgba(0,0,0,0.03) !important;
}
.mox-op .sec--white .card:hover {
  transform: translateY(-4px);
  border-color: rgba(245, 131, 39, 0.4) !important;
  box-shadow: 0 18px 40px rgba(14,15,18,0.08) !important;
}

/* 2. GREY SECTIONS (Cool Neutral Tech Grey) */
.mox-op .sec--grey {
  background: #f1f3f7 !important;
  color: #0e0f12 !important;
  border-top: 1px solid #e2e8f0;
  border-bottom: 1px solid #e2e8f0;
}
.mox-op .sec--grey h1,
.mox-op .sec--grey h2,
.mox-op .sec--grey h3 {
  color: #0e0f12 !important;
}
.mox-op .sec--grey p,
.mox-op .sec--grey li,
.mox-op .sec--grey .sub,
.mox-op .sec--grey .lead {
  color: #4b5563 !important;
}
.mox-op .sec--grey .card,
.mox-op .sec--grey .band,
.mox-op .sec--grey .tool {
  background: #ffffff !important;
  border: 1px solid #e2e8f0 !important;
  box-shadow: 0 10px 30px rgba(15,23,42,0.05) !important;
}
.mox-op .sec--grey .card:hover {
  transform: translateY(-4px);
  border-color: rgba(245, 131, 39, 0.4) !important;
  box-shadow: 0 18px 40px rgba(15,23,42,0.09) !important;
}

/* 3. BLACK SECTIONS (Obsidian High-Tech Dark) */
.mox-op .sec--dark {
  background: #0b0d12 !important;
  color: #f4f4f6 !important;
  border-top: 1px solid rgba(255,255,255,0.06);
  border-bottom: 1px solid rgba(255,255,255,0.06);
}
.mox-op .sec--dark h1,
.mox-op .sec--dark h2,
.mox-op .sec--dark h3 {
  color: #ffffff !important;
}
.mox-op .sec--dark p,
.mox-op .sec--dark li,
.mox-op .sec--dark .sub,
.mox-op .sec--dark .lead {
  color: #94a3b8 !important;
}
.mox-op .sec--dark .card {
  background: #16181f !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  box-shadow: 0 16px 36px rgba(0, 0, 0, 0.5) !important;
}
.mox-op .sec--dark .card h3 {
  color: #ffffff !important;
}
.mox-op .sec--dark .card p {
  color: #94a3b8 !important;
}
.mox-op .sec--dark .card:hover {
  transform: translateY(-4px);
  border-color: rgba(245, 131, 39, 0.5) !important;
  box-shadow: 0 20px 48px rgba(0,0,0,0.8), 0 0 20px rgba(245, 131, 39, 0.15) !important;
}
.mox-op .sec--dark .chip {
  background: rgba(245, 131, 39, 0.15) !important;
  color: #ff5a1f !important;
  border: 1px solid rgba(245, 131, 39, 0.3) !important;
}

/* TYPOGRAPHY & ELEMENTS */
.mox-op .eyebrow{display:inline-flex;align-items:center;gap:8px;font-family:var(--mox-font-m);font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--mox-primary);margin-bottom:16px}
.mox-op .eyebrow::before{content:"";width:22px;height:2px;background:var(--mox-accent)}
.mox-op h1{font-family:var(--mox-font-d);font-size:clamp(32px,4.6vw,54px);font-weight:800;line-height:1.12;letter-spacing:-.02em}
.mox-op h2{font-family:var(--mox-font-d);font-size:clamp(26px,3.4vw,38px);font-weight:700;line-height:1.18;letter-spacing:-.015em;max-width:780px}
.mox-op h3{font-family:var(--mox-font-d);font-weight:700}
.mox-op .sub{font-size:17px;color:var(--mox-ink-soft);max-width:700px;margin-top:14px;line-height:1.7}
.mox-op .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--mox-font-d);font-weight:700;font-size:15px;padding:15px 28px;border-radius:999px;border:2px solid transparent;cursor:pointer;transition:transform .25s,background .2s,box-shadow .25s}
.mox-op .btn:hover{transform:translateY(-2px)}
.mox-op .btn--p{background:var(--mox-primary);color:#fff !important;box-shadow:0 10px 26px rgba(255,90,31,.32)}
.mox-op .btn--p:hover{background:var(--mox-primary-d)}
.mox-op .btn--ghost{background:transparent;border-color:var(--mox-line);color:var(--mox-ink)}
.mox-op .btn--dg{background:transparent;border-color:rgba(255,255,255,.25);color:#fff !important}

/* TRUST BAR */
.mox-op .trust{background:#0b0d12;padding:14px 0;border-bottom:1px solid rgba(255,255,255,0.06)}
.mox-op .trust__row{display:flex;flex-wrap:wrap;justify-content:center;gap:10px 28px;font-family:var(--mox-font-m);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:#a7acb5}
.mox-op .trust__row span{display:inline-flex;align-items:center;gap:8px}
.mox-op .trust__row span::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--mox-accent)}

/* HERO */
.mox-op .hero{padding:88px 0 76px;background:radial-gradient(900px 500px at 85% -10%,rgba(255,90,31,.12),transparent 60%),radial-gradient(700px 420px at -10% 30%,rgba(255,90,31,.08),transparent 55%),#ffffff}
.mox-op .hero__grid{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:center}
.mox-op .lead{font-size:18px;color:var(--mox-ink-soft);margin:20px 0 28px;max-width:560px;line-height:1.7}
.mox-op .cta-row{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:26px}
.mox-op .ticks{display:flex;flex-wrap:wrap;gap:10px 22px;font-size:14px;color:var(--mox-ink-soft)}
.mox-op .ticks span{display:inline-flex;align-items:center;gap:7px}
.mox-op .ticks span::before{content:"13";color:var(--mox-good);font-weight:700}

/* SAMPLE CARD */
.mox-op .sample{background:#0b0d12;border:1px solid rgba(255,255,255,0.08);border-radius:24px;padding:30px;box-shadow:0 30px 70px rgba(14,15,18,.35);transform:rotate(1.2deg)}
.mox-op .sample__tag{font-family:var(--mox-font-m);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--mox-accent);margin-bottom:18px}
.mox-op .sample__score{display:flex;align-items:baseline;gap:14px;border-bottom:1px solid rgba(255,255,255,.12);padding-bottom:18px;margin-bottom:18px}
.mox-op .sample__num{font-family:var(--mox-font-m);font-size:56px;font-weight:600;color:var(--mox-accent);line-height:1}
.mox-op .sample__lbl{font-size:14px;color:#a7acb5;max-width:160px}
.mox-op .sample__row{display:flex;justify-content:space-between;gap:16px;padding:9px 0;font-size:14px}
.mox-op .sample__row b{color:#fff;font-weight:600}
.mox-op .sample__row span{color:#85898f}
.mox-op .sample__note{margin-top:16px;font-size:12.5px;color:#85898f;border-left:3px solid var(--mox-accent);padding-left:12px;line-height:1.6}

/* GRIDS & CARDS */
.mox-op .g3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:44px}
.mox-op .g2{display:grid;grid-template-columns:repeat(2,1fr);gap:22px;margin-top:44px}
.mox-op .card{border-radius:var(--mox-r);padding:28px;transition:transform .3s,box-shadow .3s,border-color .3s}
.mox-op .card h3{font-size:17.5px;margin:14px 0 8px}
.mox-op .card p{font-size:14.5px;line-height:1.65}
.mox-op .chip{display:inline-flex;font-family:var(--mox-font-m);font-size:11px;font-weight:600;letter-spacing:.08em;padding:5px 10px;border-radius:6px;background:rgba(255,90,31,.1);color:var(--mox-primary)}

/* SCORE BANDS */
.mox-op .bands{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.mox-op .band{border-radius:var(--mox-r);padding:26px;border-top:5px solid var(--mox-line);transition:transform .3s,box-shadow .3s}
.mox-op .band:hover{transform:translateY(-3px);box-shadow:0 18px 40px rgba(15,23,42,0.08) !important}
.mox-op .band h3{font-size:16px;margin:8px 0}
.mox-op .band p{font-size:14px;color:var(--mox-ink-soft);line-height:1.65}
.mox-op .band__t{font-family:var(--mox-font-m);font-weight:600;font-size:20px}
.mox-op .band--a{border-top-color:var(--mox-good) !important}.mox-op .band--a .band__t{color:var(--mox-good)}
.mox-op .band--b{border-top-color:var(--mox-warn) !important}.mox-op .band--b .band__t{color:var(--mox-warn)}
.mox-op .band--c{border-top-color:var(--mox-risk) !important}.mox-op .band--c .band__t{color:var(--mox-risk)}

/* TOOL FORM */
.mox-op .tool{border-radius:24px;padding:36px;margin-top:38px}
.mox-op .form{display:flex;flex-wrap:wrap;gap:14px}
.mox-op .form input, .mox-op .form textarea, .mox-op .form select{flex:1 1 320px;min-width:250px;font-family:var(--mox-font-b);font-size:16px;color:var(--mox-ink);background:#ffffff;border:1.5px solid #cbd5e1;border-radius:999px;padding:16px 24px;outline:none;transition:border .2s,box-shadow .2s}
.mox-op .form textarea{border-radius:18px !important;}
.mox-op .form input:focus, .mox-op .form textarea:focus, .mox-op .form select:focus{border-color:var(--mox-primary);box-shadow:0 0 0 4px rgba(255,90,31,.14)}
.mox-op .hint{font-size:13.5px;color:var(--mox-ink-soft);margin-top:14px}

/* FAQ */
.mox-op .faq{max-width:860px;margin:44px auto 0}
.mox-op .faq details{border-bottom:1px solid #e2e8f0;padding:20px 0}
.mox-op .faq summary{font-family:var(--mox-font-d);font-weight:700;font-size:17px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:16px;color:#0e0f12}
.mox-op .faq summary::after{content:"+";color:var(--mox-primary);font-size:22px;line-height:1}
.mox-op .faq details[open] summary::after{content:"12"}
.mox-op .faq p{font-size:15px;color:var(--mox-ink-soft);line-height:1.7;margin-top:14px}

/* FINAL CTA */
.mox-op .final{text-align:center;background:radial-gradient(700px 380px at 50% -20%,rgba(255,90,31,.18),transparent 60%),#0b0d12 !important;border-top:1px solid rgba(255,255,255,0.08)}
.mox-op .final h2{margin:0 auto;color:#ffffff !important}.mox-op .final .cta-row{justify-content:center;margin-top:32px}

@media(max-width:900px){
  .mox-op .hero__grid{grid-template-columns:1fr;gap:40px}
  .mox-op .g3,.mox-op .bands{grid-template-columns:1fr}
  .mox-op .g2{grid-template-columns:1fr}
  .mox-op .sec{padding:60px 0}
  .mox-op .sample{transform:none}
}

/* .mox-op base: light surface */
.mox-op h1,.mox-op h2,.mox-op h3,.mox-op h4{color:var(--mox-ink)!important}
.mox-op p,.mox-op li,.mox-op td{color:var(--mox-ink-soft)!important}
.mox-op .sub,.mox-op .lead,.mox-op .hint{color:var(--mox-ink-soft)!important}
.mox-op .card h3{color:var(--mox-ink)!important}
.mox-op .card p{color:var(--mox-ink-soft)!important}
.mox-op .band h3{color:var(--mox-ink)!important}
.mox-op .band p{color:var(--mox-ink-soft)!important}
.mox-op .faq summary{color:var(--mox-ink)!important}
.mox-op .faq p{color:var(--mox-ink-soft)!important}
.mox-op .eyebrow,.mox-op .chip{color:var(--mox-primary)!important}
.mox-op a{color:var(--mox-primary)!important}
.mox-op .btn--p{color:#fff!important}
.mox-op .btn--ghost{color:var(--mox-ink)!important}
.mox-op .band--a .band__t{color:var(--mox-good)!important}
.mox-op .band--b .band__t{color:var(--mox-warn)!important}
.mox-op .band--c .band__t{color:var(--mox-risk)!important}
/* .mox-op dark surfaces */
.mox-op .trust__row,.mox-op .trust__row span{color:#a7acb5!important}
.mox-op .sec--dark h1,.mox-op .sec--dark h2,.mox-op .sec--dark h3,.mox-op .sec--dark p,.mox-op .sec--dark li{color:#f4f4f6!important}
.mox-op .sec--dark .sub,.mox-op .sec--dark .eyebrow{color:#a7acb5!important}
.mox-op .final h1,.mox-op .final h2,.mox-op .final h3{color:#fff!important}
.mox-op .final p,.mox-op .final .sub{color:#a7acb5!important}
.mox-op .final .eyebrow{color:var(--mox-accent)!important}
.mox-op .final .btn--dg{color:#fff!important}
.mox-op .sample__tag{color:var(--mox-accent)!important}
.mox-op .sample__num{color:var(--mox-accent)!important}
.mox-op .sample__lbl,.mox-op .sample__note{color:#85898f!important}
.mox-op .sample__row span{color:#85898f!important}
.mox-op .sample__row b{color:#fff!important}
.mox-op .ticks span{color:var(--mox-ink-soft)!important}
Free tool
# Twelve checks that decide whether a page can rank at all

Titles and descriptions measured in pixels rather than characters, because that is how Google truncates them. Plus canonical, indexability, redirect chains, heading order and whether the URL is genuinely in your sitemap.

[Audit a URL](#mox-run)[SEO services](https://moxseo.com/services/seo/)Pixel-accurate truncationFollows redirect chainsReads your sitemapSample result67on-page score for this URLTitle width**612px**Canonical**Points elsewhere**In sitemap**Not listed**H1 tags**2 found**A 612px title is cut in the results. A canonical pointing elsewhere tells Google not to index this URL at all — the two together mean the page is both truncated and de-indexed.12 checksHeader and meta robotsRedirect chainsSitemap membershipNo signupThe problem
## Pages fail for reasons that never appear on the page

Most on-page problems are invisible when you look at a page in a browser. A noindex delivered in an HTTP header renders nothing. A canonical pointing at another URL looks identical to one pointing at itself. A title that fits in characters can still be cut in the results.

Invisible in the source
An X-Robots-Tag noindex is sent as an HTTP header. View-source shows nothing. Pages disappear from the index and nobody can find the cause.

Counted wrong
Title guidance is usually given in characters. Google truncates on pixel width, so capitals and wide letters cut earlier than a character count suggests.

Never discovered
A page can be perfect and still not rank if it is absent from your sitemap and has no internal links pointing at it.

What gets checked
## Twelve checks, each with the fix attached

### Title and description

Character count and measured pixel width. Flagged above 580px for titles and 990px for descriptions, where truncation begins.

### Indexability

Robots meta and the X-Robots-Tag header. The header version is the one that catches people out.

### Canonical

Whether the page points at itself or elsewhere, with the destination shown when it differs.

### Status and redirects

Follows up to five hops and lists each one. Every hop costs crawl budget.

### Heading structure

H1 count and whether levels skip. One H1, no jumps from H2 to H4.

### Sitemap membership

Finds your sitemap via robots.txt or the usual paths, follows index children, and checks this URL is listed.

### Structured data

Counts JSON-LD blocks and validates that each one parses. Invalid JSON is ignored entirely by search engines.

### Image alt text

How many images carry alt attributes and how many do not.

### Social and basics

og:image, twitter:card, viewport and the lang attribute.

The tool
## Audit any URL

Enter a live page. We fetch it as an ordinary browser would, follow any redirects, then check the twelve items and show the fix for anything that fails.

Run the audit
Also fetches robots.txt and your sitemap, so allow a few seconds.

Reading your results
## What the three states mean

### Pass

The check found what it expected. Nothing to do. A page can pass every check and still not rank — these are prerequisites, not a ranking recipe.

### Needs work

Present but outside the range that works reliably. A title at 620px will still rank; it will just be cut in the results. Worth fixing, not urgent.

### Failing

Something is actively preventing the page from working. A noindex, a missing H1, invalid JSON-LD. Fix these before anything else on the page.

The score is a weighted summary and exists only to give you a sense of scale. The individual checks are what you act on.

The honest version
## This checks structure. It does not measure whether your content is any good.

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. Use PageSpeed Insights for that. Structure and speed are separate problems with separate fixes.

### It reads the served HTML

If your content renders entirely in JavaScript, this sees what a crawler sees before execution — which is usually exactly the thing worth knowing.

### Pixel widths are approximate

Close to how Google renders but not identical. Treat 580px and 990px as guidance rather than a hard cut-off.

### The weights are ours

The score reflects our judgement of what matters. Anyone reasonable could weight it differently and get a different number from the same page.

Common questions
## On-page auditing, answered plainly

### 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.

### 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 this reports one, 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.

### Why does sitemap membership matter if the page is linked?

It usually does not for a well-linked page. It matters most for pages that are new, deep in the structure, or have few internal links — exactly the pages most likely to be missed.

### 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 you eligible, not ranked.

Next step
## One URL tells you about one page. We run this across the whole site.

Every finding here has a fix attached, and most of them are quick. The harder question is which of your pages have these problems, and which of those are worth fixing first.

[Book a scoping call](https://moxseo.com/schedule-consultation/)[See the other tools](https://moxseo.com/tools/)(function(){var B=document.getElementById("op-go"),U=document.getElementById("op-in"),O=document.getElementById("op-out");if(!B)return;var C={pass:"#16a077",warn:"#e8a20c",fail:"#e34d5b"};function esc(s){return String(s==null?"":s).replace(/[&"]/g,function(c){return {"&":"&","":">",'"':"""}[c];});}function run(){var u=(U.value||"").trim();if(!u){O.innerHTML="
Enter a URL first.

";return;}B.disabled=true;B.textContent="Checking...";O.innerHTML="
Fetching the page, robots.txt and your sitemap...

";fetch("/wp-json/moxtools/v1/onpage?url="+encodeURIComponent(u)).then(function(r){return r.json().then(function(j){return {ok:r.ok,j:j};});}).then(function(res){B.disabled=false;B.textContent="Run the audit";if(!res.ok||res.j.error){O.innerHTML="
"+esc(res.j.error||"Could not audit that URL.")+"

";return;}var d=res.j,col=d.score>=85?C.pass:(d.score>=60?C.warn:C.fail);var h="";h+="Result";h+=""+d.score+"on-page score · "+d.pass+" passing, "+d.warn+" need work, "+d.fail+" failing";h+="Title width**"+d.title_px+"px**";h+="Description width**"+d.desc_px+"px**";h+="Words on page**"+d.words+"**";if(d.redirects&&d.redirects.length){h+="Reached after "+d.redirects.length+" redirect(s). Link to the final URL directly.";}h+="";d.checks.forEach(function(c){h+="
### ";h+=""+esc(c.label)+"

";h+="
"+esc(c.detail)+"

";if(c.state!=="pass"){h+="
"+esc(c.fix)+"

";}h+="";});O.innerHTML=h;}).catch(function(){B.disabled=false;B.textContent="Run the audit";O.innerHTML="
Something went wrong. Try again.

";});}B.addEventListener("click",run);U.addEventListener("keydown",function(e){if(e.key==="Enter")run();});})();
