SEO Near You
AI search

LocalBusiness schema for industrial businesses, with copy-paste examples

Last updated

Put one JSON-LD block in your page's HTML with @type set to LocalBusiness or the closest subtype, and fill in name, address (or areaServed for a service-area business), telephone, url, openingHoursSpecification, geo and sameAs. Every value must match what the page visibly says.

What does LocalBusiness markup do?

Structured data is a block of code that states facts about your business in the schema.org vocabulary, so search engines and AI systems don’t have to infer them from your design. Google documents LocalBusiness structured data and recommends JSON-LD, a <script type="application/ld+json"> block in the page.

It doesn’t guarantee any special display in search. What it does is remove ambiguity: this is the business name, this is the phone, these are the hours, these are our profiles elsewhere.

Which type should you use?

Use the most specific schema.org type that fits, all of which are subtypes of LocalBusiness:

Business Type to use
Scrap yard, recycler RecyclingCenter
Electrical contractor Electrician
Commercial HVAC HVACBusiness
Plumbing contractor Plumber
General or roofing contractor GeneralContractor, RoofingContractor
Pallet yard, machine shop, roll-off, equipment rental LocalBusiness (no closer subtype exists)

If nothing fits, plain LocalBusiness is correct. Don’t pick a wrong subtype to seem more specific.

The fields that matter

  • name: your real business name, exactly as on the site and profile.
  • address: a PostalAddress. Leave it out if you hide your address as a service-area business.
  • areaServed: the cities, counties or states you serve.
  • telephone: in international format, +1-614-555-…, the same number as the page shows.
  • url: the page’s canonical address.
  • openingHoursSpecification: your real hours.
  • geo: latitude and longitude of the location customers visit.
  • sameAs: links to your Google Business Profile, Bing Places, and industry directory listings.
  • image and logo: real photos and your logo.

Example: a pallet yard customers can visit

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Ridgeline Pallet Co.",
  "description": "New and used pallets, heat-treated pallets and pallet pickup in central Ohio.",
  "url": "https://ridgelinepallet.example/",
  "telephone": "+1-614-000-0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "100 Example Industrial Pkwy",
    "addressLocality": "Columbus",
    "addressRegion": "OH",
    "postalCode": "43207",
    "addressCountry": "US"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": 39.9, "longitude": -82.99 },
  "areaServed": ["Franklin County, OH", "Delaware County, OH", "Licking County, OH"],
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "16:00"
    }
  ],
  "sameAs": ["https://www.example.com/your-directory-listing"]
}

Ridgeline Pallet Co. is fictional, and the phone, address and coordinates are placeholders. Replace every value with your own.

Example: a roll-off company with no storefront

A service-area business leaves out address and geo if it hides its address on its profile, and relies on areaServed:

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Two Rivers Roll-Off",
  "url": "https://tworivers.example/",
  "telephone": "+1-937-000-0000",
  "areaServed": [
    { "@type": "AdministrativeArea", "name": "Montgomery County, OH" },
    { "@type": "AdministrativeArea", "name": "Greene County, OH" }
  ],
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
      "opens": "07:00",
      "closes": "17:00"
    }
  ]
}

Example: a recycler

{
  "@context": "https://schema.org",
  "@type": "RecyclingCenter",
  "name": "Millbrook Metals",
  "url": "https://millbrook.example/",
  "telephone": "+1-937-000-0001",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "200 Example Rd",
    "addressLocality": "Dayton",
    "addressRegion": "OH",
    "postalCode": "45404",
    "addressCountry": "US"
  }
}

Mistakes the grader catches

  • Broken JSON. A missing comma or a smart quote pasted from a word processor makes the whole block unreadable. The grader reports blocks that won’t parse.
  • Only Organization. Many themes add an Organization block and stop. That says who you are, not where.
  • Facts that don’t match the page. Google’s structured data guidelines say markup should describe content that’s visible to users. If the JSON-LD phone differs from the footer phone, fix one of them.
  • Reviews you wrote yourself. Don’t add Review or AggregateRating markup for reviews about your own business on your own site; Google doesn’t show self-serving review markup for LocalBusiness.

Where to put it

In the <head> or the <body> of the page, usually once in your site template so every page carries it, or on your homepage and location pages. After adding it, run your page through the free grader to confirm it parses and has the core fields, and through Google’s Rich Results Test for Google’s own reading.

Sources