Skip to Content

No LocalBusiness schema on a location page

What Is This Issue

LocalBusiness schema is missing from pages that have a physical business location. This schema helps search engines understand your business details like address, phone number, opening hours, and geographic coordinates.

Without LocalBusiness schema:

  • Your business won’t appear in Google’s local 3-pack results
  • You won’t be eligible for Google Maps knowledge panels
  • Voice search results won’t be able to provide your business details
  • Rich snippets showing business hours, contact info won’t appear

A proper LocalBusiness schema should include: @type (specific subtype like Restaurant, Store, MedicalClinic), name, address (with PostalAddress), telephone, openingHoursSpecification, geo (latitude/longitude), and optionally priceRange, hasMap, review, etc.

Why Is This Important

LocalBusiness schema is critical for local SEO and user experience:

  • Local search visibility: Businesses with LocalBusiness schema are 2.7x more likely to be in the local 3-pack
  • Voice search optimization: Voice assistants rely on structured data to answer “near me” queries
  • Rich results: Enables business hours, contact info, and location in search results
  • AI search readiness: AI engines use LocalBusiness schema to provide accurate business information
  • Competitive advantage: Many businesses still don’t implement this schema correctly

Resolving this issue improves your local SEO health score by ensuring search engines can properly identify and display your business information.

How XeoPix Detects This

XeoPix follows these logical steps to detect missing LocalBusiness schema:

  1. Scan for physical location signals: The crawler checks if the page contains:

    • A physical address (street address, city, state, zip)
    • A phone number
    • Business hours information
    • Map embeds or directions links
  2. Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page

  3. Check for LocalBusiness schema: The crawler verifies if any schema block has:

    • @type set to LocalBusiness or a recognized subtype
    • Required properties: name, address, telephone
  4. Validate schema completeness: If LocalBusiness schema is found, the crawler checks for:

    • Proper address with PostalAddress type
    • geo coordinates (latitude/longitude)
    • openingHoursSpecification with proper format
    • priceRange (optional but recommended)
  5. Trigger conditions: The issue is flagged when:

    • Physical location signals are detected BUT no LocalBusiness schema is present
    • LocalBusiness schema exists but is missing required properties
    • The schema type is too generic (just LocalBusiness instead of a specific subtype)

How To Fix

  1. Identify pages with physical location information (Contact page, About page, Store locator)

  2. Choose the correct LocalBusiness subtype from Schema.org:

    • Restaurant, Store, MedicalClinic, Hotel, HairSalon, etc.
    • Use the most specific type that matches your business
  3. Add JSON-LD structured data to your Contact or About page:

    { "@context": "https://schema.org", "@type": "Restaurant", "name": "Your Business Name", "address": { "@type": "PostalAddress", "streetAddress": "123 Main St", "addressLocality": "City", "addressRegion": "State", "postalCode": "12345", "addressCountry": "US" }, "telephone": "+1-555-123-4567", "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "09:00", "closes": "17:00" } ], "geo": { "@type": "GeoCoordinates", "latitude": "40.7128", "longitude": "-74.0060" } }
  4. Validate with Google’s Local Business Structured Data Testing Tool


Notes

  • Use the most specific LocalBusiness subtype (e.g., Restaurant instead of generic LocalBusiness)
  • Ensure geo coordinates are accurate for your business location
  • Keep openingHoursSpecification updated with holiday hours
  • Link to your Organization schema via @id for entity consistency

What We Store

Storage Level

Page Level — This issue is evaluated for each individual URL that contains structured data.


Database Table / Prisma Model

PageStructuredData


Stored Fields

FieldTypeDescription
schemaTypeSchemaTypeThe type of schema (e.g., Organization, Person)
schemaFormatSchemaFormatThe format of the schema (JSON-LD, Microdata, RDFa)
schemaIdentifierString?Unique identifier for the schema
rawJsonJson?The raw JSON-LD or structured data content
schemaErrorsJson?Array of validation errors found in the schema
isValidSchemaBoolean?Whether the schema is valid according to validation
missingFieldsJson?Array of required fields that are missing

Detection Dependencies

  • The following data sources are required to evaluate this issue:
  • HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
  • Structured Data Validation — The extracted schema is validated against Schema.org definitions
  • Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed

Examples

Example 1: Missing LocalBusiness Schema on Contact Page

Problematic state:

<!-- Contact page without LocalBusiness schema --> <html> <head> <title>Contact Us - Joe's Pizza</title> </head> <body> <h1>Contact Us</h1> <p><strong>Address:</strong> 123 Main St, New York, NY 10001</p> <p><strong>Phone:</strong> +1-212-555-1234</p> <p><strong>Hours:</strong> Mon-Sat 11am-10pm, Sun 12pm-9pm</p> </body> </html>

Corrected state:

<!-- Contact page with LocalBusiness schema --> <html> <head> <title>Contact Us - Joe's Pizza</title> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Restaurant", "name": "Joe's Pizza", "address": { "@type": "PostalAddress", "streetAddress": "123 Main St", "addressLocality": "New York", "addressRegion": "NY", "postalCode": "10001", "addressCountry": "US" }, "telephone": "+1-212-555-1234", "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], "opens": "11:00", "closes": "22:00" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Sunday"], "opens": "12:00", "closes": "21:00" } ], "geo": { "@type": "GeoCoordinates", "latitude": "40.7128", "longitude": "-74.0060" } } </script> </head> <body> <h1>Contact Us</h1> <p><strong>Address:</strong> 123 Main St, New York, NY 10001</p> <p><strong>Phone:</strong> +1-212-555-1234</p> <p><strong>Hours:</strong> Mon-Sat 11am-10pm, Sun 12pm-9pm</p> </body> </html>

Example 2: LocalBusiness Schema for Medical Clinic

Corrected state:

{ "@context": "https://schema.org", "@type": "MedicalClinic", "name": "Downtown Medical Center", "address": { "@type": "PostalAddress", "streetAddress": "456 Health Ave", "addressLocality": "Austin", "addressRegion": "TX", "postalCode": "78701", "addressCountry": "US" }, "telephone": "+1-512-555-7890", "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "08:00", "closes": "18:00" } ], "medicalSpecialty": ["Cardiology", "Dermatology"] }

Example 3: Incomplete LocalBusiness Schema

Problematic state:

{ "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Tech Startup" }

Missing required properties: address, telephone

Corrected state:

{ "@context": "https://schema.org", "@type": "Store", "name": "Tech Startup", "address": { "@type": "PostalAddress", "streetAddress": "789 Innovation Blvd", "addressLocality": "San Francisco", "addressRegion": "CA", "postalCode": "94105", "addressCountry": "US" }, "telephone": "+1-415-555-9876" }

Unit Test

Test File

xeopix-crawling-v2/__tests__/seo-audit-checks/structuredDataRichResults/issue-75-localbusiness-schema-location.test.js

Purpose

Validates that the crawler correctly validates LocalBusiness JSON-LD schemas on location pages and does not report false positives when the schema is properly formed.

Tested Function

runStructuredDataRichResults()

Issue Information

  • Issue Number: 75
  • Issue Code: localbusiness_schema_location
  • Toggle Group: structuredDataRichResults

Test Scenarios

Positive Test Cases

  • Valid LocalBusiness schema: Page has a LocalBusiness schema with name and address — no issue reported.

Negative Test Cases

None — the test only validates that valid schemas pass.

Boundary Cases

None.

Edge Cases

  • Empty HTML: <html></html> — no crash.

Expected Outcome

Pass

Issue should not be reported when a valid LocalBusiness schema with required properties is present.

Fail

No negative test cases are defined.

Validation

  • Correct pass-through of valid LocalBusiness schemas
  • Graceful handling of empty HTML
  • xeopix-crawling-v2/toggleGroups/structuredDataRichResults.js
  • xeopix-crawling-v2/issueCodes.js
  • xeopix-crawling-v2/utils/context.js
  • xeopix-crawling-v2/utils/issues.js
  • xeopix-crawling-v2/utils/schema.js

Coverage Summary

  • Covers valid LocalBusiness schema detection
  • Covers empty HTML resilience

References

Last updated on