If you run a small local business — a bakery, a plumber, a dental clinic, a bike repair shop — your website has a quiet problem. Visitors can read your opening hours, your address, and your services, but search engines have to guess at those same facts from your page layout. Structured data removes the guesswork. It states the facts in a format machines can parse exactly, using the shared vocabulary at schema.org, embedded as a JSON-LD block in your page.

This guide walks through adding two schema types that fit most local businesses: LocalBusiness, which describes the business itself, and FAQPage, which describes the questions customers actually ask. You will build both with the Structured Data Generator, a guided form tool that produces the JSON-LD for you and checks it against required properties as you go. No coding experience is needed, and you do not need to install anything.

Before you start: gather the facts, not the guesses

Schema works only when it matches what a visitor can see on the page. Before you open the tool, collect the real details. You will need the business name exactly as it appears on your shopfront and website, the street address, the phone number customers actually call, the opening hours as they are currently posted, and the web address of the page the schema will live on. If your hours changed last month and your website still shows the old ones, fix the visible page first. Markup that contradicts the page is worse than no markup at all, because it teaches search engines not to trust your site.

For the FAQ part, pick questions customers genuinely ask, and write answers you already give. Good candidates are questions about parking, booking, prices, delivery areas, and whether walk-ins are welcome. If a question is not answered anywhere on the visible page, add the answer to the page first, then mark it up. The FAQ markup must mirror visible content; it is a machine-readable copy of what people can already read, not a place to hide extra claims.

Step 1: Build the LocalBusiness block

Open the Structured Data Generator and choose the LocalBusiness type. The form will ask for the core fields one at a time, which is the whole point of a guided form: it stops you from forgetting a required property or misspelling a property name, the two most common errors in hand-written schema.

Start with the business name and website address. Then choose the most specific business subtype that fits, rather than the generic LocalBusiness label, when one applies. A bakery, for example, is better described as a Bakery than as a generic local business, because the subtype carries meaning a search engine can use. If no subtype fits well, the general type is fine; a correct general type beats a wrong specific one.

Next, enter the address as separate fields — street, town or city, region, postal code, and country — exactly as they appear on your contact page. Then add the phone number in the format customers dial, and the opening hours. Be careful with hours: if you close early on Sundays or take a lunch break, say so. Many businesses get this wrong by copying a single "9 to 5" line across every day, and then wonder why customers arrive to a locked door. The form lets you set hours per day, so use that.

Finally, add the same-as links if you have them: your business profiles on the platforms you actually maintain. Only link profiles that are live and belong to the business. A dead or unrelated profile link adds noise and nothing else.

Step 2: Build the FAQPage block

With the LocalBusiness block done, start a second block in the tool and choose FAQPage. The form will prompt you for question-and-answer pairs, one at a time. Enter three to five questions to start. Fewer, well-answered questions beat a long list of thin ones.

Write each answer the way you would answer it at the counter: directly, in one or two short paragraphs, without marketing fluff. "Do you deliver?" deserves "Yes, we deliver within five miles of the shop, Tuesday to Saturday, for a small delivery charge" rather than a paragraph about your passion for baking. Short, factual answers are also easier to keep accurate when details change, and you will need to update the markup whenever the visible answer changes.

The two blocks stay separate: each is its own JSON-LD object with its own type, and the tool generates them separately. Place both script blocks on the same page, one after the other.

A worked example: a neighbourhood bakery

Imagine a small bakery called Rosewood Bakery, with a website at example-bakery.example and a contact page showing its address, phone number, and hours. The owner opens the Structured Data Generator, fills in the LocalBusiness form with the bakery's real details, and gets a block like this, with the example values standing in for her own:

{
  "@context": "https://schema.org",
  "@type": "Bakery",
  "name": "Rosewood Bakery",
  "url": "https://example-bakery.example/",
  "telephone": "+1-555-014-2200",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "14 High Street",
    "addressLocality": "Springfield",
    "addressRegion": "IL",
    "postalCode": "62701",
    "addressCountry": "US"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "08:00",
      "closes": "16:00"
    }
  ]
}

She then builds the FAQPage block from the two questions customers ask most:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you take orders for celebration cakes?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Celebration cakes can be ordered in the shop or by phone, at least three days ahead. Tell us the size, flavour, and date, and we will confirm the price when you order."
      }
    },
    {
      "@type": "Question",
      "name": "Is there parking nearby?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. There is free parking behind the shop on Market Lane, and two-hour street parking on High Street."
      }
    }
  ]
}

Every fact in both blocks should already be visible on the bakery's website. That matching is what makes the markup trustworthy.

Step 3: Paste, test, and check the live page

Copy each generated block, including its surrounding script tags, into your page. The usual place is the page's head section, though the body works too; what matters is that the block is present on the page it describes, not on some other page. The LocalBusiness block belongs on your home page or contact page, and the FAQPage block belongs on the page where those questions are answered.

After publishing, test the live page, because publishing can introduce errors — a content management system may strip script tags, or a caching plugin may serve an old version. Run the On-Page SEO and Redirect Checker against your URL: it reports whether JSON-LD is present, giving you an independent check that the block actually shipped. Then read the page as a visitor would and confirm the hours, phone number, and answers in the markup match what is on screen.

Keeping it accurate over time

Schema is not a one-time task. Hours change for holidays, phone numbers change, delivery areas expand. Each time a visible fact changes, update the matching markup in the same edit. A simple habit helps: whenever you edit your contact page, regenerate the LocalBusiness block in the Structured Data Generator and replace the old one. The whole job takes a few minutes, and it prevents the slow drift that makes markup unreliable.

Two companion tools are worth knowing for the wider job. The Robots.txt and Sitemap Toolkit helps make sure search engines can reach and understand your pages in the first place, and the background reading in our guide to structured data with JSON-LD explains the format in more depth, including other types you may want later, such as Organization and WebSite.

An honest limitations note

Validation is not a guarantee of rich results. The tool can confirm that your JSON-LD parses and that the required properties for each type are present, and that is genuinely useful — it catches the errors that would otherwise sink the whole effort. But whether a search engine shows any richer presentation for your business is Google's decision, made per query and per site, and it can change over time. Some schema types that once produced visible enhancements no longer do so for most sites. Treat the markup as accurate labelling for your business, which helps search engines understand your pages, and treat any richer display as a possibility rather than a promised outcome. If a guide promises you a particular search appearance in exchange for adding schema, it is promising something it cannot control.

FAQs

Do I need both LocalBusiness and FAQPage, or is one enough?

One is enough to start, and LocalBusiness is the better first choice for most local businesses because it describes the business itself. Add FAQPage when you have real questions with real answers already on the page. There is no penalty for having one block and not the other.

Will adding schema change my ranking?

Schema is not a ranking boost by itself. Its job is to help search engines understand your page accurately. Good understanding supports good visibility, but ranking depends on many factors — content, relevance, links, and the searcher's location and query — and no markup can substitute for those.

What happens if my opening hours change and I forget to update the markup?

Visitors may be misled, and search engines may eventually distrust the markup. Fix it as soon as you notice, and make updating the markup part of the same edit as updating the visible hours. A few minutes of discipline here prevents a lasting mismatch.

Can I use the same LocalBusiness block on every page of my site?

No. Put it on the page or pages that actually describe the business, typically the home page or contact page. Copying the same block onto unrelated pages, such as individual product or blog pages, muddies what each page is about. Each page's markup should describe that page.

human review pending client designation