Schema Markup and JSON-LD: A Practical Guide for Business Sites

Structured data is a way of describing your content to machines in a format they can read without guessing. A search engine looking at a page can usually work out that a block of text is a business address, but structured data removes the doubt. It can make pages eligible for rich results, helps search systems and AI assistants understand who you are, and keeps your information consistent across the web. This guide explains which schema types matter for business sites, how to write them in JSON-LD and how to avoid the mistakes that cause markup to be ignored.
What schema markup is
Schema.org is a shared vocabulary of types, such as Organization, Article and LocalBusiness, and properties, such as name, address and datePublished. You can add it to a page in several formats. Google recommends JSON-LD, a block of script that sits in the page and is separate from the visible HTML. That separation makes it easier to add, update and debug than older formats that were woven into the markup.
Be clear about what schema does and does not do. It is not a ranking factor on its own. It gives search systems cleaner information, which can enable enhanced listings and improve how accurately your business is understood. It will not rescue a weak page.
The schema types worth your time
Organization
Describes your company: name, logo, website, contact details and official profiles. The sameAs property lists your social profiles and other authoritative pages about you, which helps tie your brand together as a single entity. It usually belongs on the home page or the About page.
LocalBusiness
For businesses with a location or service area. It adds address, phone, opening hours, geographic coordinates and the areas you serve. Use the most specific subtype that fits, such as a dentist or a self-storage business, rather than the generic type. This supports the work described in our local SEO guide.
WebSite
Identifies the site itself and its name. It helps Google display the right site name in results.
Article and BlogPosting
For blog posts and news. Include the headline, author, publication date, modified date, image and publisher. Accurate dates and authorship also support the trust signals discussed in our answer engine optimization guide.
BreadcrumbList
Describes the path to a page, such as Home, Blog, then the post. It can replace the raw URL in search results with a readable trail.
Service and Product
Service markup describes what you offer, its provider and the area served. Product markup, for physical or digital goods, can enable price and availability details in results when the page really is a product page.
Person
Useful for author and founder pages. It links a named person to the organization, their role and their profiles, which strengthens identity signals.
FAQPage
Can describe questions and answers that appear on a page. Note that since 2023 Google shows FAQ rich results mainly for well-known government and health sites, so most businesses will not see the expandable listing. The markup remains valid when the questions are visible on the page, but do not add it expecting a visual change in results.
A working example
Here is a simplified Organization block in JSON-LD. Replace the sample values with your own details.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Company",
"url": "https://www.example.com/",
"logo": "https://www.example.com/logo.png",
"sameAs": [
"https://www.facebook.com/examplecompany",
"https://x.com/examplecompany"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"email": "hello@example.com"
}
}
</script>
The structure is always the same: declare the context, name the type, then list properties. Nested objects, such as the contact point, carry their own type.
How to implement it on WordPress
- Use your SEO plugin. Rank Math and similar plugins generate Organization, WebSite, Article and breadcrumb markup automatically once you complete the site identity settings. This is the best option for most sites.
- Customize through the plugin. Rank Math lets you choose the schema type per post type and override it on individual pages.
- Write custom JSON-LD in a template or a small plugin when you need something the plugin does not cover, such as detailed LocalBusiness data or a Service type tied to a custom post type.
- Avoid duplicates. If your theme and your plugin both output schema, you may end up with conflicting blocks. Pick one source for each type.
Building structured data properly is part of good development practice, as discussed in our guide to WordPress development best practices.
Validate before and after publishing
Check your markup with two free tools. Google’s Rich Results Test shows whether a page is eligible for specific enhanced results and reports errors and warnings. The Schema Markup Validator checks that the syntax is correct for any schema.org type, including ones Google does not use for rich results. Re-test after theme or plugin updates, and watch the Enhancements reports in Search Console for new errors across your site.
Rules that keep your markup trustworthy
- Mark up only what is visible. Do not describe content in schema that visitors cannot see on the page.
- Keep it accurate and current. Opening hours, prices and addresses in markup must match reality.
- Do not fake reviews or ratings. Self-serving or invented review markup can lead to a manual action.
- Use the right type. A blog post is not a Product, and a service page is not a LocalBusiness listing for another town.
- Fill required and recommended properties where you have the data, rather than leaving gaps.
- Connect entities. Use consistent names and URLs so the organization, its people and its content refer to one another clearly.
Why schema matters for AI search
AI assistants and search features try to understand which entity a page is about and whether the source is reliable. Structured data supplies explicit facts about your organization, authors and content, which supports the entity work described in our GEO guide. It is no guarantee of being cited, but unambiguous data is a better starting point than guesswork.
Common mistakes
- Marking up every page with the same generic block that does not reflect the page content.
- Leaving placeholder values from a plugin setup wizard in place.
- Duplicate Organization blocks from a theme and plugin that disagree with each other.
- Adding review stars for reviews that are not shown on the page.
- Ignoring warnings in the testing tools, which often point to useful missing details.
Example: marking up a service page
A service page can describe what you offer, who provides it and where. Here is a simplified Service block that you could adapt.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Technical SEO Audit",
"serviceType": "SEO",
"description": "A full review of crawling, indexing, speed and structured data with a prioritised fix list.",
"provider": {
"@type": "Organization",
"name": "Example Company",
"url": "https://www.example.com/"
},
"areaServed": "Worldwide"
}
</script>
The description must match the text on the page, and the provider should point to the same organization named in your site-wide markup so that the entities connect.
Troubleshooting schema problems
| Symptom | Likely cause | What to do |
|---|---|---|
| Test tool shows a syntax error | Missing comma or quote, or stray characters pasted from a document | Validate the JSON and retype quotation marks as plain characters |
| Warnings about missing recommended fields | Optional properties not provided | Add them where you have accurate data, or ignore if not relevant |
| Two Organization blocks with different details | Theme and plugin both output schema | Disable one source or align the values |
| No rich result despite valid markup | Eligibility is not guaranteed, or the type no longer produces a visual result | Check Google’s current documentation for the type |
| Search Console reports new errors after an update | A plugin or theme change altered output | Re-test affected pages and roll back or fix the change |
Structured data is one part of a wider AI search plan. For the bigger picture, read AEO vs GEO optimization services compared and AI-driven visibility services in GEO and AEO.
Frequently asked questions
Does schema improve my rankings directly?
Not on its own. It helps search systems understand your content and can make you eligible for enhanced results, which can improve clicks. It does not make a weak page rank.
Should I use a plugin or write markup by hand?
Use your SEO plugin for standard types, and add custom JSON-LD only where the plugin does not cover your needs. Avoid having two sources output the same type.
Can wrong markup hurt me?
Misleading markup, such as invented reviews or details that do not appear on the page, can lead to manual actions and loss of rich results. Mark up only accurate, visible information.
How often should I review my schema?
Check it after theme or plugin updates, when business details change and as part of regular technical audits. Our technical SEO checklist includes it.
Related: is FAQ schema still worth using, WordPress SEO services.
Also read: does ChatGPT use schema markup.
Also read: schema markup services, LocalBusiness schema in WordPress.
For how schema relates to Google’s newest search experience, read does Google AI Mode use schema markup.
Running an online store? See our service for answer engine optimization for ecommerce stores.
Where schema fits in a technical audit
Structured data is one item on a larger list that also covers crawling, indexing, speed and site structure. Work through the full list in our technical SEO checklist for WordPress. If you would rather have it done for you, see our technical SEO services or contact us and we will review what your site currently outputs.