Seitenbefund
  • Sample report
  • How it works
  • Blog
  • FAQ
  • For agencies
  • Pricing
EN/DEStart free website check
EN/DE
← Back to all posts
SEO·April 29, 2026·3 min read

Schema.org for small businesses

Most small business sites need only three schema types. Here is what helps rich results and what we remove during audits.

by Lukas Freitag

Schema.org has 800+ types. The vast majority of small business sites need three of them. Everything else is overhead — crawler budget spent, no rich results gained, occasionally a manual action earned.

LocalBusiness: the foundation block

If your business has a physical address, opening hours, and a service area, LocalBusiness (or a more specific subtype like Restaurant, Dentist, LegalService) is mandatory. Google Maps, the local pack on the SERP, and the knowledge panel pull from this node first.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dentist",
  "@id": "https://smile-dental.example/#localbusiness",
  "name": "Smile Dental Practice",
  "url": "https://smile-dental.example/",
  "telephone": "+1-415-555-0142",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1421 Market St",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94103",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 37.775,
    "longitude": -122.418
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "08:00",
    "closes": "17:00"
  }]
}
</script>

Three details audits regularly find missing:

  • @id with a stable URL. Without @id, a crawler cannot consolidate the business identity across pages. The same @id appears on every page that references the business.
  • addressCountry as an ISO-3166-1 alpha-2 code, not a free-form string. Search Console treats this as a strong geo-targeting signal.
  • #schema-org
  • #structured-data
  • #seo
  • #rich-results
  • #jsonld

German version: schema-org-fuer-kmu

Want to see where your site stands?

The free short check inspects visibility, structure, performance, and the technical baseline of your domain — passively, in minutes.

Start the short check

Related posts

  • Legal·April 25, 2026·3 min read

    Cookie banners without dark patterns

    Three consent rules most banners break, the CJEU equivalence requirement, and a minimal pattern that avoids dark patterns.

    Read more →
  • Performance·April 18, 2026·4 min read

    Core Web Vitals explained

    What LCP, INP and CLS measure, why a Lighthouse 100 can still ship a slow site, and which fixes move most audits.

    Read more →
← Back to all posts
Seitenbefund

Passive website inspection for visibility, structure, performance, accessibility and baseline technical security.

Services

  • Penetration testing
  • SEO remediation
  • Accessibility remediation
  • Baseline security hardening

Legal

  • Imprint
  • Privacy
  • Terms

© 2026 Seitenbefund kontakt@seitenbefund.de

We only fetch publicly reachable pages. No logins, no port scans, no active security testing.

  • openingHoursSpecification rather than the legacy openingHours string. The string form ("Mo-Fr 09:00-17:00") still parses but breaks down for split shifts and seasonal hours.
  • Service or Product: pick the right node

    Consulting, legal advice, plumbing, web design — those are Service. Physical goods or digital products with a fixed SKU — Product with Offer. The distinction is not cosmetic: Google renders Product rich results with price, Service does not.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Service",
      "@id": "https://smile-dental.example/services/cleaning#service",
      "serviceType": "Routine dental cleaning",
      "provider": { "@id": "https://smile-dental.example/#localbusiness" },
      "areaServed": [
        { "@type": "City", "name": "San Francisco" },
        { "@type": "City", "name": "Oakland" }
      ],
      "audience": { "@type": "PeopleAudience" }
    }
    </script>
    

    Note the @id reference back to the LocalBusiness. That tells Google these service nodes belong to the same business entity without duplicating the address every time.

    FAQPage: the underrated win

    FAQPage is the cheapest path to a rich result. A real FAQ section with five to ten Q&A pairs, properly marked up, regularly earns expanded snippets in the SERP.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "How long is a routine cleaning appointment?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Routine cleanings take 30 to 45 minutes."
        }
      }]
    }
    </script>
    

    Critical: the answer text in the JSON-LD must match the visible text on the page exactly. Google verifies this. Sites that put text in JSON-LD that does not appear on screen earn a manual action and lose the markup permission outright.

    What we delete in every audit

    • Article on every subpage. Article is for news and blog posts, not service pages. Putting it on a service page actively confuses Google about what the page is.
    • Review/AggregateRating without real reviews. Even one unsupported five-star claim costs trust and risks a manual action.
    • BreadcrumbList for two-level sites. Most small business sites are home → service. Adding a breadcrumb block adds maintenance and earns no rich result.
    • Organization alongside LocalBusiness. LocalBusiness is a subtype of Organization. Shipping both is redundant; Google prefers the more specific node.

    Validate before shipping

    Three tools we use in every audit:

    1. Google Rich Results Test — tells you directly whether Google considers the node eligible for a rich result.
    2. Schema.org validator — catches syntax errors and missing required fields.
    3. Search Console → "Enhancements" — shows what Google sees during the actual crawl. Discrepancies between the test tool and the crawl are nearly always CDN cache issues.

    The Seitenbefund short check lists every JSON-LD node on your domain, validates syntax, and flags missing required-by-Google fields.