Schema markup

Organization vs LocalBusiness Schema: Which Goes on Your Homepage?

Both define your business identity to Google. The wrong choice fragments your Knowledge Panel. Here's the decision framework.

Published May 23, 20266 min readBy RankCrab Team

There is one question you need to answer before adding business identity schema to your homepage: do customers visit you at a physical address?

If yes, use LocalBusiness. If no, use Organization. That's the decision. Everything below explains why, what each type gives you in Google Search, and how to write the JSON-LD.

Free tool
Schema markup generator
Generate valid JSON-LD in 60 seconds — no signup.
Try it

The relationship between Organization and LocalBusiness

Both are defined in schema.org's type hierarchy. LocalBusiness is a direct subclass of Organization, which means it inherits all of Organization's properties and adds location-specific ones on top.

Choosing LocalBusiness when you have a physical location is not wrong because it's "more specific" — it's right because Google treats the two types differently. Organization feeds Knowledge Panel data for brands. LocalBusiness feeds Knowledge Panel data and local pack eligibility.

This is covered in the schema markup documentation at schema.org, but Google's implementation is what actually matters for search results.

The decision framework

Use Organization when:

  • Your business has no physical location customers visit
  • You operate entirely online (SaaS, e-commerce, newsletter, blog)
  • You have a registered business address but customers never come to it (a home address used for LLC registration, a virtual office, etc.)
  • You are an agency, consultancy, or freelancer without a client-facing office

Use LocalBusiness when:

  • Customers visit your location to receive your service or buy your products
  • You have a physical storefront, office, clinic, restaurant, or studio
  • You want to appear in Google's local pack ("near me" results, the map 3-pack)
  • You have a Google Business Profile listing you want Google to match to your site

How Google uses each type

Organization feeds the brand Knowledge Panel — the info box that appears on the right side of desktop search results when someone searches your company name. This panel can show your logo, site links, social profiles, and a description. It relies on name, url, logo, and sameAs (your social profiles).

LocalBusiness feeds both the Knowledge Panel and local pack eligibility. The local pack is the map + three-business listing that appears for queries like "accountant in Austin" or "coffee shop near me." Schema alone does not guarantee local pack inclusion (you need a Google Business Profile and sufficient ranking signals), but it reinforces the address and category data Google uses to match you to location-based queries.

LocalBusiness subtypes

LocalBusiness is itself a parent type with dozens of subtypes. Using a more specific subtype helps Google categorize you correctly:

Business typeRecommended subtype
Restaurant, cafe, barRestaurant, CafeOrCoffeeShop, BarOrPub
Retail storeStore, ClothingStore, BookStore, FurnitureStore
Medical / healthMedicalClinic, Dentist, Physician
Legal servicesLegalService, Attorney
Financial servicesFinancialService, AccountingService
Home servicesHomeAndConstructionBusiness, Plumber, Electrician
Fitness / wellnessSportsActivityLocation, HealthClub
Professional services (no specific subtype)ProfessionalService

If your business type doesn't have a specific subtype, LocalBusiness directly is fine. Use ProfessionalService for generic service businesses (consultants, agencies, etc.) that do have a physical office.

You can browse the full schema.org type tree to find subtypes. Look for one that accurately describes your primary category. Don't pick a subtype just because it sounds close — if you're a general marketing agency with an office, ProfessionalService is more accurate than AdvertisingAgency unless advertising is genuinely your primary service.

Complete JSON-LD: Organization

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme SaaS Inc.",
  "url": "https://acmesaas.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://acmesaas.com/logo.png",
    "width": 200,
    "height": 60
  },
  "description": "Acme SaaS helps small businesses automate their invoicing and payroll.",
  "email": "hello@acmesaas.com",
  "foundingDate": "2021",
  "sameAs": [
    "https://twitter.com/acmesaas",
    "https://www.linkedin.com/company/acmesaas",
    "https://www.facebook.com/acmesaas"
  ]
}

sameAs is important here. It's how Google connects your schema to your social profiles and third-party mentions, which strengthens Knowledge Panel consolidation. Include every official profile URL you maintain.

Complete JSON-LD: LocalBusiness

{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Riverside Tax & Accounting",
  "url": "https://riversidetax.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://riversidetax.com/logo.png"
  },
  "image": "https://riversidetax.com/office-front.jpg",
  "description": "Full-service tax preparation and accounting for small businesses and individuals in Austin, TX.",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1204 Lamar Blvd, Suite 300",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78703",
    "addressCountry": "US"
  },
  "telephone": "+1-512-555-0199",
  "email": "info@riversidetax.com",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    }
  ],
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 30.2672,
    "longitude": -97.7431
  },
  "priceRange": "$$",
  "sameAs": [
    "https://www.facebook.com/riversidetax",
    "https://g.co/kgs/EXAMPLE"
  ]
}

A few fields worth noting:

address — Must match your Google Business Profile address exactly. Any discrepancy weakens the association.

openingHoursSpecification — Use the structured format shown above rather than the plain openingHours string property. The structured version is more reliably parsed.

geo — Latitude/longitude helps Google disambiguate businesses with common names. Get your coordinates from Google Maps: right-click your location and select the coordinates from the context menu.

priceRange — The $ to $$$$ convention Google recognizes. This appears in some Knowledge Panel displays.

Where to put it on your homepage

Place the JSON-LD in the <head> of your homepage. For most platforms this means:

  • WordPress: Add it to your theme's <head> via functions.php or a plugin like Code Snippets. See the WordPress schema guide for the hook to use.
  • Next.js: Use a <Script> component with strategy="beforeInteractive" or place it in your root layout.tsx. The Next.js schema guide covers this in detail.
  • Webflow: Use a Custom Code embed in your page settings <head> section. The Webflow schema guide explains the embed locations.
  • Shopify: Add it to theme.liquid inside the <head> tags. The Shopify schema guide covers theme file editing.

The schema should appear on the homepage only — not sitewide. Putting Organization or LocalBusiness schema on every page is unnecessary and can create duplicate entity signals.

Validating your markup

After adding the JSON-LD, test it with Google's Rich Results Test. Paste your homepage URL and look for "Organization" or the LocalBusiness subtype you used in the detected items list.

Free tool
Schema markup generator
Generate valid JSON-LD in 60 seconds — no signup.
Try it

The condensed version

  • Physical location customers visit → LocalBusiness (or a more specific subtype)
  • Online-only business → Organization
  • Never both on the same page
  • Address in LocalBusiness must match Google Business Profile exactly
  • Always include sameAs with your social profiles
  • Place it in <head> on the homepage only

Schema generated, validated, deployed.

Skip the JSON-LD copy-paste loop. RankCrab generates schema and audits every page for errors.