---
title: NAP and Local Schema Consistency Checker
description: Free toolYour markup and your page must say exactly the same thingDirectories and search engines match business details on exact strings. Suite and Ste are trea
url: https://moxseo.com/tools/nap-consistency-checker
date_modified: 2026-08-14
author: Admin
language: en_US
---

.mox-np{
  --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-np *,.mox-np *::before,.mox-np *::after{box-sizing:border-box;margin:0;padding:0}
.mox-np a{text-decoration:none}
.mox-np button{font-family:inherit}
.mox-np .w{max-width:1180px;margin:0 auto;padding:0 22px}
.mox-np .sec{padding:88px 0;transition: background 0.3s ease;}

/* 1. WHITE SECTIONS */
.mox-np .sec--white {
  background: #ffffff !important;
  color: #0e0f12 !important;
  border-top: 1px solid #eef0f3;
  border-bottom: 1px solid #eef0f3;
}
.mox-np .sec--white h1,
.mox-np .sec--white h2,
.mox-np .sec--white h3 {
  color: #0e0f12 !important;
}
.mox-np .sec--white p,
.mox-np .sec--white li,
.mox-np .sec--white .sub,
.mox-np .sec--white .lead {
  color: #525866 !important;
}
.mox-np .sec--white .card {
  background: #ffffff !important;
  border: 1px solid #e2e8f0 !important;
  box-shadow: 0 4px 20px rgba(0,0,0,0.03) !important;
}
.mox-np .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-np .sec--grey {
  background: #f1f3f7 !important;
  color: #0e0f12 !important;
  border-top: 1px solid #e2e8f0;
  border-bottom: 1px solid #e2e8f0;
}
.mox-np .sec--grey h1,
.mox-np .sec--grey h2,
.mox-np .sec--grey h3 {
  color: #0e0f12 !important;
}
.mox-np .sec--grey p,
.mox-np .sec--grey li,
.mox-np .sec--grey .sub,
.mox-np .sec--grey .lead {
  color: #4b5563 !important;
}
.mox-np .sec--grey .card,
.mox-np .sec--grey .band,
.mox-np .sec--grey .tool {
  background: #ffffff !important;
  border: 1px solid #e2e8f0 !important;
  box-shadow: 0 10px 30px rgba(15,23,42,0.05) !important;
}
.mox-np .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-np .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-np .sec--dark h1,
.mox-np .sec--dark h2,
.mox-np .sec--dark h3 {
  color: #ffffff !important;
}
.mox-np .sec--dark p,
.mox-np .sec--dark li,
.mox-np .sec--dark .sub,
.mox-np .sec--dark .lead {
  color: #94a3b8 !important;
}
.mox-np .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-np .sec--dark .card h3 {
  color: #ffffff !important;
}
.mox-np .sec--dark .card p {
  color: #94a3b8 !important;
}
.mox-np .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-np .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-np .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-np .eyebrow::before{content:"";width:22px;height:2px;background:var(--mox-accent)}
.mox-np 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-np 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-np h3{font-family:var(--mox-font-d);font-weight:700}
.mox-np .sub{font-size:17px;color:var(--mox-ink-soft);max-width:700px;margin-top:14px;line-height:1.7}
.mox-np .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-np .btn:hover{transform:translateY(-2px)}
.mox-np .btn--p{background:var(--mox-primary);color:#fff !important;box-shadow:0 10px 26px rgba(255,90,31,.32)}
.mox-np .btn--p:hover{background:var(--mox-primary-d)}
.mox-np .btn--ghost{background:transparent;border-color:var(--mox-line);color:var(--mox-ink)}
.mox-np .btn--dg{background:transparent;border-color:rgba(255,255,255,.25);color:#fff !important}

/* TRUST BAR */
.mox-np .trust{background:#0b0d12;padding:14px 0;border-bottom:1px solid rgba(255,255,255,0.06)}
.mox-np .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-np .trust__row span{display:inline-flex;align-items:center;gap:8px}
.mox-np .trust__row span::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--mox-accent)}

/* HERO */
.mox-np .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-np .hero__grid{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:center}
.mox-np .lead{font-size:18px;color:var(--mox-ink-soft);margin:20px 0 28px;max-width:560px;line-height:1.7}
.mox-np .cta-row{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:26px}
.mox-np .ticks{display:flex;flex-wrap:wrap;gap:10px 22px;font-size:14px;color:var(--mox-ink-soft)}
.mox-np .ticks span{display:inline-flex;align-items:center;gap:7px}
.mox-np .ticks span::before{content:"13";color:var(--mox-good);font-weight:700}

/* SAMPLE CARD */
.mox-np .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-np .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-np .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-np .sample__num{font-family:var(--mox-font-m);font-size:56px;font-weight:600;color:var(--mox-accent);line-height:1}
.mox-np .sample__lbl{font-size:14px;color:#a7acb5;max-width:160px}
.mox-np .sample__row{display:flex;justify-content:space-between;gap:16px;padding:9px 0;font-size:14px}
.mox-np .sample__row b{color:#fff;font-weight:600}
.mox-np .sample__row span{color:#85898f}
.mox-np .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-np .g3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:44px}
.mox-np .g2{display:grid;grid-template-columns:repeat(2,1fr);gap:22px;margin-top:44px}
.mox-np .card{border-radius:var(--mox-r);padding:28px;transition:transform .3s,box-shadow .3s,border-color .3s}
.mox-np .card h3{font-size:17.5px;margin:14px 0 8px}
.mox-np .card p{font-size:14.5px;line-height:1.65}
.mox-np .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-np .bands{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.mox-np .band{border-radius:var(--mox-r);padding:26px;border-top:5px solid var(--mox-line);transition:transform .3s,box-shadow .3s}
.mox-np .band:hover{transform:translateY(-3px);box-shadow:0 18px 40px rgba(15,23,42,0.08) !important}
.mox-np .band h3{font-size:16px;margin:8px 0}
.mox-np .band p{font-size:14px;color:var(--mox-ink-soft);line-height:1.65}
.mox-np .band__t{font-family:var(--mox-font-m);font-weight:600;font-size:20px}
.mox-np .band--a{border-top-color:var(--mox-good) !important}.mox-np .band--a .band__t{color:var(--mox-good)}
.mox-np .band--b{border-top-color:var(--mox-warn) !important}.mox-np .band--b .band__t{color:var(--mox-warn)}
.mox-np .band--c{border-top-color:var(--mox-risk) !important}.mox-np .band--c .band__t{color:var(--mox-risk)}

/* TOOL FORM */
.mox-np .tool{border-radius:24px;padding:36px;margin-top:38px}
.mox-np .form{display:flex;flex-wrap:wrap;gap:14px}
.mox-np .form input, .mox-np .form textarea, .mox-np .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-np .form textarea{border-radius:18px !important;}
.mox-np .form input:focus, .mox-np .form textarea:focus, .mox-np .form select:focus{border-color:var(--mox-primary);box-shadow:0 0 0 4px rgba(255,90,31,.14)}
.mox-np .hint{font-size:13.5px;color:var(--mox-ink-soft);margin-top:14px}

/* FAQ */
.mox-np .faq{max-width:860px;margin:44px auto 0}
.mox-np .faq details{border-bottom:1px solid #e2e8f0;padding:20px 0}
.mox-np .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-np .faq summary::after{content:"+";color:var(--mox-primary);font-size:22px;line-height:1}
.mox-np .faq details[open] summary::after{content:"12"}
.mox-np .faq p{font-size:15px;color:var(--mox-ink-soft);line-height:1.7;margin-top:14px}

/* FINAL CTA */
.mox-np .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-np .final h2{margin:0 auto;color:#ffffff !important}.mox-np .final .cta-row{justify-content:center;margin-top:32px}

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

/* .mox-np base: light surface */
.mox-np h1,.mox-np h2,.mox-np h3,.mox-np h4{color:var(--mox-ink)!important}
.mox-np p,.mox-np li,.mox-np td{color:var(--mox-ink-soft)!important}
.mox-np .sub,.mox-np .lead,.mox-np .hint{color:var(--mox-ink-soft)!important}
.mox-np .card h3{color:var(--mox-ink)!important}
.mox-np .card p{color:var(--mox-ink-soft)!important}
.mox-np .band h3{color:var(--mox-ink)!important}
.mox-np .band p{color:var(--mox-ink-soft)!important}
.mox-np .faq summary{color:var(--mox-ink)!important}
.mox-np .faq p{color:var(--mox-ink-soft)!important}
.mox-np .eyebrow,.mox-np .chip{color:var(--mox-primary)!important}
.mox-np a{color:var(--mox-primary)!important}
.mox-np .btn--p{color:#fff!important}
.mox-np .btn--ghost{color:var(--mox-ink)!important}
.mox-np .band--a .band__t{color:var(--mox-good)!important}
.mox-np .band--b .band__t{color:var(--mox-warn)!important}
.mox-np .band--c .band__t{color:var(--mox-risk)!important}
/* .mox-np dark surfaces */
.mox-np .trust__row,.mox-np .trust__row span{color:#a7acb5!important}
.mox-np .sec--dark h1,.mox-np .sec--dark h2,.mox-np .sec--dark h3,.mox-np .sec--dark p,.mox-np .sec--dark li{color:#f4f4f6!important}
.mox-np .sec--dark .sub,.mox-np .sec--dark .eyebrow{color:#a7acb5!important}
.mox-np .final h1,.mox-np .final h2,.mox-np .final h3{color:#fff!important}
.mox-np .final p,.mox-np .final .sub{color:#a7acb5!important}
.mox-np .final .eyebrow{color:var(--mox-accent)!important}
.mox-np .final .btn--dg{color:#fff!important}
.mox-np .sample__tag{color:var(--mox-accent)!important}
.mox-np .sample__num{color:var(--mox-accent)!important}
.mox-np .sample__lbl,.mox-np .sample__note{color:#85898f!important}
.mox-np .sample__row span{color:#85898f!important}
.mox-np .sample__row b{color:#fff!important}
.mox-np .ticks span{color:var(--mox-ink-soft)!important}
Free tool
# Your markup and your page must say exactly the same thing

Directories and search engines match business details on exact strings. Suite and Ste are treated as different addresses. This compares the name, address and phone in your structured data against what is actually written on the page.

[Check a page](#mox-run)[Local SEO](https://moxseo.com/services/seo/local/)Schema against page textPhone matched on digitsHours, geo and sameAsSample result57NAP consistency score for this pageBusiness schema**Present**Phone in schema**Not on page**Address match**62%**sameAs profiles**None**A phone number in your markup that appears nowhere in your visible text is a mismatch a directory will treat as two different businesses. So is Suite where the page says Ste.Digit-level phone matchToken-level address matchOpening hoursGeo coordinatesNo signupThe problem
## Machines match on strings, not on meaning

A human reading Suite 4 and Ste 4 sees one address. A matching algorithm building a business entity across dozens of directories sees two. When those records disagree, the entity fragments — and a fragmented entity ranks worse than a single consistent one.

It starts on your own site
Most inconsistency does not begin at a directory. It begins with markup that says one thing and page text that says another.

Formatting counts
Abbreviations, punctuation in phone numbers, a missing postcode. Each is enough to make two records look like two businesses.

Nothing tells you
There is no warning and no error. The listing simply performs worse than it should, and the cause is invisible.

What gets checked
## Seven checks on your business markup

### Business schema present

Whether a LocalBusiness or Organization node exists at all. Without one, everything else is inferred from page text.

### Phone consistency

The schema number stripped to digits and matched against every number on the page. Formatting is ignored; the digits must agree.

### Address consistency

The schema address normalised and compared token by token against the page text, reported as a percentage.

### A single primary number

Several distinct numbers on one page makes it ambiguous which is your main line.

### Opening hours

Whether hours are declared in markup rather than only as text. Declared hours can surface in the map pack.

### Geo and sameAs

Coordinates remove ambiguity when a street name repeats. sameAs is what ties your site to your Business Profile.

The tool
## Check a page for NAP consistency

Point it at your contact or location page, where your details should be most complete. We read the structured data, extract every phone number and address fragment from the visible text, then compare them.

Check consistency
Reads one page. It does not query third-party directories — see the honest version below.

Reading your results
## What the address percentage means

### 80% and above

Strong agreement. Your markup and your page are describing the same address in compatible terms.

### 50 to 79%

Partial. Usually an abbreviation difference or a missing element such as the postcode. Worth aligning.

### Below 50%

Your markup and your page are effectively describing different addresses. Fix this before touching any directory listing.

Matching is token-based after normalising common abbreviations, so a high percentage means strong agreement rather than character-identical formatting.

The honest version
## This checks the part you control, which is not the whole problem

Getting your own markup and page to agree is necessary and it is where most inconsistency starts. It is not the same as auditing your presence across the web, and we would rather say so than imply otherwise.

### It cannot see your map pack position

That needs live SERP data. This checks your own page and markup.

### It does not query directories

Verifying Yelp, Justdial or Apple Maps means asking each one. This compares your schema against your own page.

### It reads one page

If your details differ between your contact page and your footer, run it against both.

### Consistency is not ranking

Review velocity, profile completeness and proximity move the map pack. Consistency stops you losing ground you already hold.

Common questions
## NAP consistency, answered plainly

### Does formatting really matter that much?

For entity matching, yes. Different systems normalise differently, and the safest position is that your details are written identically everywhere you control.

### What if I have several locations?

Each location needs its own page and its own LocalBusiness node. One node listing several addresses is ambiguous.

### Should the phone in schema be the tracking number?

No. Use your real primary line in markup. Call tracking numbers that appear only in schema are a common source of mismatch.

### Is sameAs actually important?

It is the clearest way to state which profiles belong to you. Most local sites omit it, which leaves the connection to be inferred.

Next step
## Consistent markup is the floor, not the ceiling

Once your own details agree, the work that actually moves the map pack begins: citations, profile completeness, review velocity and the pages that support each location.

[Local SEO services](https://moxseo.com/services/seo/local/)[See the other tools](https://moxseo.com/tools/)(function(){var B=document.getElementById("np-go"),U=document.getElementById("np-in"),O=document.getElementById("np-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];});}var HS="font-family:Sora,sans-serif;font-size:19px;margin:26px 0 8px";function run(){var u=(U.value||"").trim();if(!u){O.innerHTML="
Enter a URL first.

";return;}B.disabled=true;B.textContent="Checking...";O.innerHTML="
Reading the page and its structured data...

";fetch("/wp-json/moxtools/v1/nap?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="Check consistency";if(!res.ok||res.j.error){O.innerHTML="
"+esc(res.j.error||"Could not check 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+"NAP consistency · "+d.pass+" passing, "+d.warn+" need work, "+d.fail+" failing";if(d.schema&&d.schema.length){var s=d.schema[0];h+="Name in schema**"+esc(s.name||"none")+"**";h+="Phone in schema**"+esc(s.phone||"none")+"**";h+="Address in schema: "+esc(s.addr||"none")+"";}else{h+="No business node found in the structured data on this page.";}if(d.phones&&d.phones.length){h+="Numbers in page text**"+esc(d.phones.slice(0,3).join(", "))+"**";}h+="";h+="
### Checks

";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="Check consistency";O.innerHTML="
Something went wrong. Try again.

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