Schema markup is structured data code that helps search engines understand your content and display rich results. Using JSON-LD format, you can mark up articles, products, FAQs, local businesses, and more. Schema markup improves click-through rates through enhanced SERP features.
Schema markup is structured data code that helps search engines understand your content and display rich results. Using JSON-LD format, you can mark up articles, products, FAQs, local businesses, and more. Schema markup improves click-through rates through enhanced SERP features.
What is Schema Markup?
Schema markup is a semantic vocabulary of tags that you add to your HTML to improve how search engines read and represent your page in search results. It was created through collaboration between Google, Microsoft, Yahoo, and Yandex as Schema.org.
Schema markup benefits:
| Benefit | Description |
|---|---|
| Rich results | Enhanced SERP appearance with stars, images, prices |
| Better understanding | Search engines comprehend content meaning |
| Knowledge Graph | Potential inclusion in Google’s Knowledge Graph |
| Voice search | Structured data helps voice assistants |
| Higher CTR | Rich results attract more clicks |
Schema Markup Formats
JSON-LD (Recommended)
JSON-LD (JavaScript Object Notation for Linked Data) is Google’s recommended format. It’s added as a script in the page head, separate from HTML content.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Schema Markup Guide",
"author": {
"@type": "Person",
"name": "Nurul Aisyah"
}
}
</script>
JSON-LD advantages:
- Separate from HTML content
- Easier to generate dynamically
- Simpler to maintain
- Less error-prone
Microdata
Microdata embeds structured data within HTML using attributes.
<article itemscope itemtype="https://schema.org/Article">
<h1 itemprop="headline">Schema Markup Guide</h1>
<span itemprop="author" itemscope itemtype="https://schema.org/Person">
<span itemprop="name">Nurul Aisyah</span>
</span>
</article>
RDFa
RDFa uses HTML attributes similar to Microdata.
<article vocab="https://schema.org/" typeof="Article">
<h1 property="headline">Schema Markup Guide</h1>
<span property="author" typeof="Person">
<span property="name">Nurul Aisyah</span>
</span>
</article>
Common Schema Types
Article Schema
For blog posts, news articles, and content pages.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Schema Markup: Complete Guide",
"description": "Learn how to implement schema markup for SEO",
"image": "https://example.com/image.jpg",
"author": {
"@type": "Person",
"name": "Nurul Aisyah",
"url": "https://semantic.my/author/nurul-aisyah/"
},
"publisher": {
"@type": "Organization",
"name": "Semantic.my",
"logo": {
"@type": "ImageObject",
"url": "https://semantic.my/logo.png"
}
},
"datePublished": "2024-03-20",
"dateModified": "2026-01-20"
}
Organization Schema
For company and brand information.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Semantic.my",
"url": "https://semantic.my",
"logo": "https://semantic.my/logo.png",
"description": "SEO agency in Malaysia",
"sameAs": [
"https://linkedin.com/company/semantic-my",
"https://twitter.com/semanticmy"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+60-17-202-0030",
"contactType": "customer service"
}
}
LocalBusiness Schema
For businesses with physical locations.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Semantic.my",
"image": "https://semantic.my/office.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "Level 10, Menara XYZ",
"addressLocality": "Kuala Lumpur",
"postalCode": "50450",
"addressCountry": "MY"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 3.1412,
"longitude": 101.6865
},
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
},
"priceRange": "RM1,500 - RM15,000"
}
FAQ Schema
For frequently asked questions sections.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is schema markup?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Schema markup is structured data that helps search engines understand content."
}
},
{
"@type": "Question",
"name": "Does schema help SEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Schema enables rich results which improve click-through rates."
}
}
]
}
Product Schema
For e-commerce product pages.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "SEO Audit Service",
"description": "Comprehensive technical SEO audit",
"offers": {
"@type": "Offer",
"price": "3000",
"priceCurrency": "MYR",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "24"
}
}
BreadcrumbList Schema
For navigation breadcrumbs.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://semantic.my"
},
{
"@type": "ListItem",
"position": 2,
"name": "SEO",
"item": "https://semantic.my/seo/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Technical SEO",
"item": "https://semantic.my/seo/technical-seo/"
}
]
}
Connected Schema with @graph
Use @graph to connect multiple schema entities on a single page, creating a more complete picture for search engines.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://semantic.my/#organization",
"name": "Semantic.my",
"url": "https://semantic.my"
},
{
"@type": "WebSite",
"@id": "https://semantic.my/#website",
"url": "https://semantic.my",
"publisher": {"@id": "https://semantic.my/#organization"}
},
{
"@type": "WebPage",
"@id": "https://semantic.my/schema-markup/#webpage",
"isPartOf": {"@id": "https://semantic.my/#website"},
"author": {"@id": "https://semantic.my/author/nurul-aisyah/#person"}
},
{
"@type": "Article",
"mainEntityOfPage": {"@id": "https://semantic.my/schema-markup/#webpage"},
"author": {"@id": "https://semantic.my/author/nurul-aisyah/#person"},
"publisher": {"@id": "https://semantic.my/#organization"}
},
{
"@type": "Person",
"@id": "https://semantic.my/author/nurul-aisyah/#person",
"name": "Nurul Aisyah"
}
]
}
Rich Results Types
Schema markup can trigger various rich results in Google:
| Rich Result | Schema Required | Appearance |
|---|---|---|
| Review snippet | Review, AggregateRating | Star ratings |
| FAQ | FAQPage | Expandable Q&A |
| How-to | HowTo | Step-by-step instructions |
| Recipe | Recipe | Image, rating, cook time |
| Product | Product, Offer | Price, availability |
| Event | Event | Date, location, tickets |
| Job posting | JobPosting | Salary, location |
| Breadcrumbs | BreadcrumbList | Navigation path |
Implementation Best Practices
Do’s
- Use JSON-LD format
- Include all required properties
- Keep schema accurate to page content
- Test with Rich Results Test
- Use @id for entity connections
- Update schema when content changes
Don’ts
- Mark up content not visible on page
- Use schema to deceive users
- Include irrelevant schema types
- Forget required properties
- Use outdated schema versions
Testing and Validation
Google Rich Results Test
Tests if your page is eligible for rich results:
- URL: search.google.com/test/rich-results
- Shows which rich results are detected
- Previews how results may appear
Schema Markup Validator
Validates syntax against Schema.org vocabulary:
- URL: validator.schema.org
- Checks all schema types
- More comprehensive than Rich Results Test
Google Search Console
Monitor schema performance:
- Enhancements report shows rich result status
- Identifies errors and warnings
- Tracks impressions and clicks
Schema Implementation Checklist
Site-Wide Schema
- Organization schema on homepage
- WebSite schema with search action
- BreadcrumbList on all pages
- Logo properly linked
Article Pages
- Article or BlogPosting schema
- Author linked to Person schema
- Publisher linked to Organization
- datePublished and dateModified
Product Pages
- Product schema with offers
- Price and availability
- AggregateRating if reviews exist
- Images included
Local Business
- LocalBusiness with full address
- GeoCoordinates for maps
- OpeningHoursSpecification
- Contact information
Common Schema Mistakes
- Missing required properties - Schema won’t validate
- Marking up hidden content - Against guidelines
- Incorrect schema type - Using Product for services
- Not connecting entities - Missing relationships
- Outdated information - Prices, hours not updated
- Duplicate schema - Same type multiple times incorrectly
Conclusion
Schema markup helps search engines understand your content and enables rich results that improve click-through rates. JSON-LD is the recommended format for its simplicity and maintainability.
Start with essential schema types: Organization, Article, and BreadcrumbList. Add FAQ schema where relevant. For local businesses, LocalBusiness schema is critical for local SEO.
Use connected schema with @graph to create relationships between entities. Test with Google’s Rich Results Test and monitor performance in Search Console. Properly implemented schema is a valuable part of technical SEO that enhances search visibility.