Fix-it guide

Add Organization or LocalBusiness JSON-LD schema

JSON-LD is a small block of structured code in your page <head> that hands Google a machine-readable fact sheet about your business.

High impact~1 hourStructured data & social

What it is

JSON-LD is a small block of structured code in your page <head> that hands Google a machine-readable fact sheet about your business. It is invisible to visitors but powers the rich extras in search results, your phone number, hours, star rating, address, and Knowledge Panel.

Why it matters

For service businesses, the right schema is the single biggest lever on local-pack visibility, Knowledge Panel ownership, and rich-result eligibility. Without it, Google has to scrape your address out of your footer and hope for the best. With it, you control the data and unlock features competitors are leaving on the table.

How to fix it

  1. Pick the right type for your business

    If you serve customers from a physical location with hours (use LocalBusiness, or TaxiService for a car service), use LocalBusiness or one of its sub-types. If you are a non-local company (SaaS, agency), use Organization.

  2. Build the JSON-LD block

    Drop this into the <head> of your homepage. Customize the fields for your business. A limo or black-car company has no dedicated schema.org type, use LocalBusiness, or TaxiService for a car service. The full list is on schema.org.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "LocalBusiness",
      "name": "Apex Car Service",
      "url": "https://apexcarservice.com",
      "logo": "https://apexcarservice.com/logo.png",
      "image": "https://apexcarservice.com/hero.jpg",
      "telephone": "+1-512-555-0100",
      "priceRange": "$$",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "1234 Main St",
        "addressLocality": "Austin",
        "addressRegion": "TX",
        "postalCode": "78701",
        "addressCountry": "US"
      },
      "geo": {
        "@type": "GeoCoordinates",
        "latitude": 30.2672,
        "longitude": -97.7431
      },
      "openingHoursSpecification": [
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
          "opens": "08:00",
          "closes": "18:00"
        }
      ],
      "sameAs": [
        "https://www.facebook.com/apexcarservice",
        "https://www.instagram.com/apexcarservice"
      ]
    }
    </script>
  3. Make sure NAP matches everywhere

    Name, Address, and Phone must match EXACTLY across your schema, footer, Google Business Profile, Yelp, and citations. Even small differences ("Suite 200" vs "Ste 200") fragment your local SEO.

  4. Next.js: inject via a <Script> tag

    In App Router, render a <Script type="application/ld+json"> in your layout or page.

    import Script from 'next/script';
    
    const schema = {
      '@context': 'https://schema.org',
      '@type': 'LocalBusiness',
      // ... rest of the object
    };
    
    export default function Layout({ children }) {
      return (
        <>
          <Script
            id="ld-organization"
            type="application/ld+json"
            dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
          />
          {children}
        </>
      );
    }

How to verify the fix

Paste the page URL into Google's Rich Results Test (search.google.com/test/rich-results), it should detect your schema and report "Eligible for rich results" with no errors. Within a few weeks, monitor Search Console > Enhancements for the new schema type to appear.

Further reading

Confirm the fix

Run a fresh audit to make sure the issue is gone.

We’ll re-grade every category and confirm this issue is no longer firing.

Run a fresh audit