All 17 checks with why-it-matters prose, severity, and cross-references to related audits.
Without a LocalBusiness JSON-LD block using schema-org LocalBusiness type, Google has no machine-readable signal to populate Knowledge Panels, local pack results, or Maps entries for your business. Competitors with this schema in place get rich search result features — star ratings, hours, phone number — that yours will not. Omitting it doesn't just hurt rankings; it makes your business invisible to the structured-data pipeline that drives local discovery at scale.
Why this severity: Critical because the absence of LocalBusiness JSON-LD eliminates eligibility for Google's local pack, Knowledge Panel, and map results — the primary discovery channels for local businesses.
marketing-local-seo.local-schema.local-business-jsonldSee full patternA LocalBusiness JSON-LD block without `name`, `address`, and `telephone` is structurally incomplete per schema-org LocalBusiness and schema-org PostalAddress specifications. Google requires these three fields to associate your structured data with a real physical entity. A schema missing `telephone` or a properly nested `PostalAddress` with at least `streetAddress` and `addressLocality` will not generate a Knowledge Panel entry or local pack listing, and Google may ignore the entire block.
Why this severity: High because incomplete required fields cause Google to discard the LocalBusiness schema entity, negating the visibility benefit of having structured data at all.
marketing-local-seo.local-schema.schema-required-fieldsSee full patternBusiness hours in structured data via schema-org OpeningHoursSpecification or schema-org openingHours enable Google to display your open/closed status directly in search results and Maps. Without this, customers clicking through from search have no immediate answer to whether you're currently open — a friction point that drives them to competitors who have the data surfaced. Hours omission also prevents Google's "Open now" filter from returning your business.
Why this severity: Medium because missing hours degrade the search result snippet and exclude the business from 'Open now' filter queries, reducing click-through without blocking indexing entirely.
marketing-local-seo.local-schema.business-hours-schemaSee full patternStar ratings in Google search results come exclusively from schema-org AggregateRating or schema-org Review structured data — a testimonials section in your UI does not surface this data to crawlers. Businesses displaying review stars in their search snippet receive significantly higher click-through rates. If your site already shows customer testimonials but lacks the corresponding JSON-LD, you're doing the work of collecting reviews while forfeiting the search result benefit entirely.
Why this severity: Medium because the omission loses a high-impact click-through signal (review stars in SERP) without creating a security or correctness defect.
marketing-local-seo.local-schema.review-schemaSee full patternMalformed JSON-LD, wrong case on `@type`, or typo'd property names like `adress` cause schema.org parsers to silently discard the block, which strips local-pack rich results (stars, hours, address card) from Google and Bing SERPs. The reference-integrity taxon applies: a structurally broken block is indistinguishable from no structured data at all, costing click-through in geo queries where competitors with valid LocalBusiness markup win the visual real estate.
Why this severity: High because one syntax error nullifies the entire block and kills rich-result eligibility across every page that renders it.
marketing-local-seo.local-schema.schema-validationSee full patternThe `url` field in a schema-org LocalBusiness entity explicitly links the structured data entity to your canonical website. Without it, Google's Knowledge Graph cannot definitively associate the JSON-LD block with your domain, weakening entity disambiguation — particularly for businesses with common names or those operating in multiple cities. It takes one field to provide this signal; omitting it is an unnecessary gap.
Why this severity: Info because the missing `url` field weakens entity disambiguation but does not prevent indexing, ranking, or structured data rich results from being generated.
marketing-local-seo.local-schema.schema-url-fieldSee full patternNAP inconsistency — variations in your business name, address, or phone number across footer, contact page, JSON-LD schema, and config files — is one of the most heavily weighted negative factors in local search ranking algorithms. Citation aggregators and Google's local index cross-reference every mention of your NAP data; even minor format differences like `Main St` vs `Main Street` or `(555) 555-1234` vs `+15555551234` create conflicting signals that suppress local pack placement. This is a schema-org LocalBusiness correctness issue with direct revenue impact for any location-dependent business.
Why this severity: Critical because NAP inconsistency directly suppresses local pack rankings by creating conflicting entity signals across the citation graph that Google uses to determine local search placement.
marketing-local-seo.nap-business-info.nap-consistencySee full patternA plain-text phone number forces mobile visitors to memorize digits, switch apps, and type manually — most abandon before dialing. Wrapping the number in `tel:` turns every render into a one-tap call on iOS and Android, directly converting local-search intent into booked calls. Non-E.164 hrefs (missing `+` or country code) fail on international roamers and some carrier dialers, silently dropping leads from the exact high-intent mobile traffic local SEO is meant to capture.
Why this severity: High because phone calls are the primary conversion event for most local businesses and a plain-text number blocks tap-to-call on mobile.
marketing-local-seo.nap-business-info.phone-clickableSee full patternAn address present only in JSON-LD schema-org PostalAddress but absent from rendered HTML provides zero value to users and is less trusted by Google as a local relevance signal than visible, crawlable address text. Customers on a contact page who cannot find a physical address are more likely to bounce to a competitor with a clear location. For service businesses, a visible address also satisfies the trust threshold that converts first-time visitors — omitting it measurably degrades conversion on local landing pages.
Why this severity: High because the absence of a visible address removes a primary user trust signal on contact and landing pages, directly hurting conversion for location-dependent businesses.
marketing-local-seo.nap-business-info.address-displayedSee full patternA site without a linked Google Business Profile or Maps URL forces customers to open a new tab, re-search the business name, and hope the right GBP entry surfaces — a detour that tanks direction-seeking conversions and starves the GBP listing of the outbound click signals Google uses to rank it. Under the findability taxon, the GBP is the canonical local record; orphaning it from the website weakens the site's own local pack position.
Why this severity: Medium because most visitors can still find directions via a second search, but the detour measurably reduces conversion on mobile.
marketing-local-seo.nap-business-info.gbp-linkSee full patternPage titles and meta descriptions with no city, region, or service-area name produce no geographic relevance signal for local search. A title like `Best Plumbing Services` competes nationally for a keyword you can't win; `Plumbing Services in Springfield, OH` targets the exact query your customers type. This is the cheapest, highest-return local SEO change available — missing it means every page is competing in a broader market than the business actually serves, while leaving schema-org LocalBusiness entity associations unanchored in the page's textual context.
Why this severity: Critical because geo-less titles and meta descriptions forfeit local keyword targeting on every page simultaneously, making the site structurally invisible to local search queries.
marketing-local-seo.local-content.local-keywords-metaSee full patternA multi-area business served by a single homepage competes for every `[service] in [city]` query with one generic page, which loses to competitors who operate a dedicated page per service area. Google's local ranking weighs on-page geographic relevance; without per-city content it has nothing to match against long-tail local queries. The findability taxon applies directly — the pages that do not exist cannot rank, and the homepage cannot rank for cities it never mentions.
Why this severity: Medium because the business still ranks for its primary city but forfeits organic traffic from every surrounding service area.
marketing-local-seo.local-content.location-landing-pagesSee full patternWithout an embedded map, visitors deciding whether to drive to a physical location cannot visually confirm distance, parking, or neighborhood context, and drop off before making the trip. The embed also serves as a findability signal — Google treats map embeds as corroboration of the address in JSON-LD and footer NAP, reinforcing that the business operates at the claimed coordinates. Service businesses without a map on the contact page consistently underperform on in-person visit conversion.
Why this severity: Medium because a map is not required for ranking but materially improves conversion on the contact and location pages.
marketing-local-seo.local-content.map-embedSee full patternPages that mention a city only in the footer address read as national or generic to Google's local ranking model, which looks for geographic terms in headings, body copy, and anchor text — not just the LocalBusiness JSON-LD. Under the findability taxon, location-specific content is what separates a page that ranks for `[service] in [city]` from one that ranks only for the brand name. Competitors who mention neighborhoods, landmarks, and service areas in headings win the long-tail local queries.
Why this severity: Low because the impact is incremental ranking lift on long-tail local queries, not a hard conversion blocker.
marketing-local-seo.local-content.location-specific-contentSee full patternA generic brand title like `Quality Plumbing Services` competes with national chains for every query and gives Google no signal that the business is local. Including the city in the root layout title and Open Graph title — `Springfield Plumbing` — claims the geo modifier in the SERP snippet, the browser tab, and every social share card. The findability taxon applies: the title tag is the single strongest on-page ranking signal for local queries, and leaving it generic forfeits that lever entirely.
Why this severity: Medium because the title tag drives click-through on every SERP and social share, and a generic title costs ranking on every local query.
marketing-local-seo.local-signals.brand-local-identifierSee full patternSocial profile links on Facebook, Instagram, Yelp, or Nextdoor are used by schema-org sameAs to build entity associations between your website and your off-site business presence. More practically, local customers actively verify businesses on these platforms before making contact — a footer with no social links raises trust friction. Platforms like Yelp and Nextdoor are explicit local discovery surfaces; having no link to your presence there means customers who start discovery there never find a path to your site.
Why this severity: Low because missing social links reduce trust and local citation breadth without directly blocking search indexing or structured data eligibility.
marketing-local-seo.local-signals.social-profile-linksSee full patternschema-org GeoCoordinates and schema-org areaServed give Google precise signals for map placement and service-area targeting. Without `geo` coordinates, Google must infer your map pin from address text matching — an imprecise process that can result in incorrect placement. Without `areaServed` or `serviceArea`, service-area businesses (plumbers, landscapers, delivery services) that don't serve customers at a single fixed address have no way to declare their coverage, making them invisible to queries from customers in their actual service footprint.
Why this severity: Low because omitting geo and areaServed reduces map placement precision and service-area query coverage without preventing other local SEO signals from functioning.
marketing-local-seo.local-signals.schema-geo-or-service-areaSee full patternRun this audit in your AI coding tool (Claude Code, Cursor, Bolt, etc.) and submit results here for scoring and benchmarks.
Open Local SEO Audit