Structured Data Implementation: Schema.org for SEO
Structured data helps search engines understand your content semantically, enabling rich results like stars, prices, FAQs, and recipe cards in search. This guide covers JSON-LD implementation.
Key Takeaways
- Structured data uses a standardized vocabulary (Schema.org) to annotate page content so search engines can parse meaning beyond raw text.
- When a page needs multiple schema types (Article plus BreadcrumbList plus Organization), wrap them in a single `@graph` array rather than multiple separate script tags.
- Missing required fields (e.g., `image` for Article)
Generator Schema.org
Buat markup Schema.org JSON-LD untuk rich snippets
What Is Structured Data
Structured data uses a standardized vocabulary (Schema.org) to annotate page content so search engines can parse meaning beyond raw text. The preferred format is JSON-LD (JavaScript Object Notation for Linked Data), embedded in a tag.
Rich Result Types
| Schema Type | Rich Result | Use Case |
|---|---|---|
| Article | News carousel | Blog posts, news |
| Product | Price, rating, availability | E-commerce |
| FAQPage | Expandable Q&A | FAQ sections |
| HowTo | Step-by-step cards | Tutorials |
| Recipe | Image, time, rating | Food content |
| BreadcrumbList | Navigation trail | All pages |
| WebApplication | App info | Online tools |
| Organization | Knowledge panel | About pages |
JSON-LD Best Practices
Use @graph for Multiple Types
When a page needs multiple schema types (Article plus BreadcrumbList plus Organization), wrap them in a single @graph array rather than multiple separate script tags.
Match Visible Content
Google requires that structured data reflects content actually visible on the page. Marking up content that users cannot see violates guidelines and can result in manual actions.
Test Before Deploying
Use Google's Rich Results Test and Schema Markup Validator to verify your JSON-LD is error-free before pushing to production.
Common Errors
- Missing required fields (e.g.,
imagefor Article) - Using incorrect types (e.g., WebPage instead of Article for blog posts)
- Hardcoded URLs instead of dynamic values
- Forgetting to escape special characters in JSON strings
- Nesting types incorrectly (publisher inside Article should be an Organization, not a string)