Schema markup is machine-readable code that tells search engines what your content means rather than leaving them to infer it. It is one of the few SEO tasks that is genuinely technical, entirely within your control, and produces a visible result.
What it looks like in a search result
Two competing businesses with similar rankings can occupy very different amounts of screen space:
Without schema
- Page title
- One line of description
- URL
- Roughly three lines of the results page
With schema
- Page title and description
- Breadcrumb navigation trail
- Expandable FAQ questions
- Star ratings, price, or availability where relevant
- Often triple the visual footprint
Schema rarely moves you up the page. It makes the position you already hold considerably harder to scroll past.
Use JSON-LD, not the alternatives
There are three formats — Microdata, RDFa, and JSON-LD. Google explicitly recommends JSON-LD, and it is far easier to maintain because it sits in a single script block rather than being scattered through your HTML.
Practical advantage: because JSON-LD lives in one block in the page head, you can change your markup without touching your layout — and your designer cannot accidentally break your SEO by restructuring a div.
The types worth implementing
| Type | Use it on | Benefit |
|---|---|---|
| Organization | Every page | Establishes your brand entity |
| LocalBusiness | Homepage, contact | Location, hours, map eligibility |
| WebSite | Homepage | Site name and search box |
| BreadcrumbList | All inner pages | Breadcrumb trail in results |
| Service | Service pages | Clarifies what you offer |
| FAQPage | Pages with real Q&A | Expandable questions in results |
| BlogPosting | Articles | Author, date, article eligibility |
| Product | Product pages | Price, stock, ratings |
A worked example
Here is minimal, valid LocalBusiness markup for a Bengaluru company. Everything in it corresponds to information visible on the page:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Your Company Pvt Ltd",
"url": "https://example.in/",
"telephone": "+91 96772 61485",
"address": {
"@type": "PostalAddress",
"streetAddress": "5th A Cross, R.R. Layout",
"addressLocality": "Bengaluru",
"addressRegion": "Karnataka",
"postalCode": "560056",
"addressCountry": "IN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 12.9163,
"longitude": 77.4900
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
"opens": "09:30",
"closes": "19:00"
}]
}
</script>
Connecting entities with @graph
Rather than emitting several disconnected blocks, put every entity in a single @graph array and link them with @id references. This tells search engines that the organisation on your contact page is the same entity as the publisher of your articles — a much stronger signal than repeated, unlinked mentions.
The rules that keep you out of trouble
- Only mark up visible content. Schema describing things not on the page violates guidelines.
- Never invent ratings or reviews. This is the most commonly penalised schema abuse.
- Keep it accurate. If your hours change, update the markup too.
- Do not mark up FAQs that are not genuine questions. Keyword-stuffed fake FAQs get manual actions.
- Validate before deploying. Use Google's Rich Results Test and the Schema.org validator.
How to implement it
- Decide which types apply Most business sites need Organization, LocalBusiness, WebSite, BreadcrumbList, and Service.
- Generate the JSON-LD from your real data Build it from the same source as your visible content so the two cannot drift apart.
- Place it in the page head A single script tag per page.
- Validate every template Run each page type through the Rich Results Test.
- Monitor Search Console The Enhancements section reports errors on live pages — check it monthly.
On WordPress: Yoast and RankMath generate reasonable baseline schema automatically. Problems arise when you run two SEO plugins together, or add a third schema plugin — duplicate, conflicting markup is worse than none. Pick one and stick with it.
Every page on this site emits a linked @graph — you can view source on any page to see a working implementation. If you would like your markup audited or built properly, get in touch. Pair this with local SEO for the biggest combined effect.