Structured data (schema.org) for business websites
Structured data helps Google understand what your business does and can earn rich results. Learn which schema.org types a business website needs, how to write valid JSON-LD, how to test it and which common mistakes to avoid.
Search engines read your website differently from people. They see the text, but they do not always know that a string of digits is a phone number or that "9–5" means opening hours. Structured data solves that. Structured data is a standardized description of a page's content, usually written as JSON-LD using the schema.org vocabulary, that tells search engines explicitly what a business, product, article or event is. This guide covers which schema.org types a business website should use, how to write valid markup, how to test it and which mistakes to avoid.
Key takeaways
- Structured data describes page content in a machine-readable way, most often as JSON-LD with the schema.org vocabulary.
- Google recommends JSON-LD because it is separate from the HTML and easiest to maintain.
- Structured data is not a direct ranking factor, but it can earn rich results and helps search engines understand a page.
- Markup must match the content visible on the page; describing things users cannot see violates Google's guidelines.
- You can validate markup with the Rich Results Test and the Schema Markup Validator, and monitor errors in Google Search Console.
What structured data is and how it works
Schema.org is a shared vocabulary of types and properties maintained by the major search engines. It describes hundreds of kinds of things: organizations, local businesses, products, articles, recipes, events, job postings. You can add schema.org markup to a page in three ways.
| Format | How it works | When to use it |
|---|---|---|
| JSON-LD | A separate script block, independent of the HTML | By default – recommended by Google and easiest to maintain |
| Microdata | Attributes added to HTML elements | Older templates where data is already marked up this way |
| RDFa | HTML attributes based on a W3C standard | Rare on business sites; more common in open-data projects |
On a business website you will almost always choose JSON-LD. The code is readable, you can change it without touching the template, and it is easy to generate from CMS fields.
Which schema.org types a business website needs
You do not have to describe everything. A typical business site needs only a handful of types that match real content.
| Type | Where | What it provides |
|---|---|---|
| Organization | Home page | Company name, logo, contact details and social profiles |
| LocalBusiness (or a subtype) | Home or contact page | Address, opening hours, phone – important for local SEO |
| WebSite | Home page | The site name shown in search results |
| BreadcrumbList | Subpages | A breadcrumb trail instead of a raw URL in results |
| Article / BlogPosting | Blog posts | Author, published and modified dates, image |
| Product and Offer | Product pages | Price, availability, ratings – rich results for stores |
| Event | Training sessions, webinars | Date, location, attendance mode |
Watch out for types whose display Google has restricted. FAQ rich results now appear mainly for authoritative government and health websites, and HowTo rich results have been retired. FAQPage markup does no harm, but do not expect expandable questions in search results.
A structured data example for a local business
The JSON-LD below describes a service business with an address and opening hours. Place it inside a <script type="application/ld+json"> tag on the home page or contact page.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Example Studio",
"url": "https://www.example.com/",
"telephone": "+44 20 0000 0000",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Example Street",
"addressLocality": "London",
"postalCode": "EC1A 1AA",
"addressCountry": "GB"
},
"openingHours": "Mo-Fr 09:00-17:00"
}
The values must match what is shown on the page and in your Google Business Profile. When opening hours change, update them everywhere at the same time.
How to connect schemas on one page
A single page often contains several types at once: a blog post has an author, a publisher and a breadcrumb trail. Instead of repeating the full company description in every block, give it an identifier with the @id property, such as the home page URL followed by #organization, and reference it from other schemas. Search engines then see one consistent entity rather than several separate companies with the same name. Do the same with authors: describe each person once and reference them from every article. On multilingual sites, each language version should have its own markup with text in that language, while the organization identifier can stay shared.
How to implement structured data step by step
- List your page types. Home, contact, services, blog post, product – each type gets the appropriate schema.
- Choose schema.org types. Start with Organization or LocalBusiness plus BreadcrumbList; add more only when you have matching content.
- Build a JSON-LD template. Wherever possible, fill it from CMS fields instead of typing values by hand on every page.
- Make sure the markup reaches the HTML. It should appear in the page source, not only after scripts run in the browser.
- Test and monitor. After publishing, check the markup with testing tools and then watch the Search Console reports.
How to test schema markup
- Rich Results Test (Google) shows whether a page qualifies for specific rich results and which fields are missing.
- Schema Markup Validator (validator.schema.org) checks conformance with the schema.org vocabulary, including types Google does not display.
- Google Search Console reports errors and warnings site-wide in its enhancements section, so you spot problems quickly after a template change.
Common structured data mistakes
- Markup that does not match the content. The price, rating or hours in the code differ from those on the page.
- Self-serving reviews. Google does not show star ratings for reviews of a business marked up as Organization or LocalBusiness on its own website.
- Duplicate schemas. The template and an extra script output two different descriptions of the same company.
- Outdated data. An old address or phone number remains in the code after the page has been updated.
- Missing required properties. For example, a Product without a price or an Event without a start date.
Does structured data improve Google rankings?
Not directly. Google has repeatedly said that structured data is not a ranking factor. It does help search engines understand a page unambiguously, and a rich result (stars, price, breadcrumbs) takes up more space and often attracts more clicks. AI-driven search is also growing, and clearly described facts about a business are easier for it to cite. That is a good reason to treat schema.org as part of solid technical SEO rather than a trick.
How LessCMS handles it
- You set structured data from the admin panel, without editing template code.
- Pages are server-side rendered (SSR), so markup and content are in the HTML that search engines read.
- Meta titles and descriptions are set per page, entry and language, and the sitemap and robots.txt are generated automatically.
See the full feature set on the LessCMS SEO page, and if SEO is your job, visit LessCMS for SEO specialists.
Frequently asked questions
Does a small business website need structured data?
Yes, though only a little. Organization or LocalBusiness markup plus breadcrumbs takes minutes to set up and helps search engines connect the site to a specific business and its contact details.
How do I add structured data to a website?
The simplest way is to add JSON-LD in a script tag in the page head or body. If your CMS lets you set structured data from the panel, you do not need to edit the template or ask a developer.
What is the difference between JSON-LD and microdata?
JSON-LD is a separate block of code, while microdata consists of attributes added to existing HTML elements. Google recommends JSON-LD because it is easier to maintain and does not break when the template changes.
Why is Google not showing rich results despite valid structured data?
Valid markup does not guarantee a rich result. Google decides whether to show one based on page quality, the query and the markup type, and some types, such as FAQ, are shown only for selected sites.
How can I check whether my structured data works?
Paste the page URL into the Rich Results Test and the Schema Markup Validator. After launch, monitor the enhancement reports in Google Search Console, which show errors across the whole site.
Want solid technical SEO without plugins or hand-editing code? Sign up without a card and compare plans on the LessCMS pricing page.