Appearance
SEO & Schema
Overview
Converto emits structured data (JSON-LD) on product reviews, blog posts, author pages, FAQ blocks, and breadcrumbs - without you having to think about it. Search engines pick this up to render rich results: star ratings, product info, FAQ accordions, breadcrumb trails.
What's emitted
| Schema type | Where it appears | What it powers |
|---|---|---|
| Person + Product + Review | Single product pages (@graph) | Star ratings, product info card, byline |
| Person + Organization + BlogPosting | Single blog posts (@graph) | Article rich result, byline, publisher |
| Person | Single author pages | Author profile, E-E-A-T signals |
| FAQPage | Any page that contains an FAQ block | Collapsible Q&A in search results |
| BreadcrumbList | Any page where the breadcrumb has more than one crumb | Breadcrumb trail in SERPs |
Product review schema
Every published product emits a combined Person + Product + Review graph, stitched together via stable @id references so Google reads it as one rich snippet:
jsonld
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Person",
"@id": "...#person",
"name": "...",
"url": "...",
"image": "...",
"jobTitle": "...",
"description": "...",
"knowsAbout": ["...", "..."],
"sameAs": ["...", "..."]
},
{
"@type": "Product",
"@id": "...#product",
"name": "...",
"url": "...",
"description": "...",
"image": "...",
"aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.5, "bestRating": 5, "worstRating": 0, "reviewCount": 4 },
"offers": { "@type": "Offer", "price": "29.99", "priceCurrency": "USD", "availability": "https://schema.org/InStock", "url": "..." },
"review": { "@id": "...#review" }
},
{
"@type": "Review",
"@id": "...#review",
"name": "X Review",
"reviewRating": { "@type": "Rating", "ratingValue": 4.5, "bestRating": 5, "worstRating": 0 },
"reviewBody": "...",
"datePublished": "...",
"dateModified": "...",
"itemReviewed": { "@id": "...#product" },
"author": { "@id": "...#person" }
}
]
}Pulled from:
- Person - the product's assigned Author CPT. Fills
name,url,image,jobTitle,description(from bio),knowsAbout(from expertise rows),sameAs(from socials). - Product.description - the product's Short Review (falls back to Label if empty).
- Product.image - the product's featured image.
- Product.aggregateRating - emitted only when Global Rating is set.
ratingValueis the global rating,reviewCountis the number of per-rating-category rows on the product (minimum 1). - Product.offers - the featured pricing tier (or first tier if none flagged featured).
priceis the numeric part of the price field;priceCurrencydefaults toUSDand can be filtered (see below);availabilityis alwaysInStock;urlis the tier's affiliate link. - Review.reviewRating - mirrors the global rating.
- Review.reviewBody - the product's Author Verdict field, plain text.
- Review.datePublished / dateModified - the product's created and last-modified dates.
AggregateRating eligibility
Google has tightened rich-result eligibility - AggregateRating derived from a single editor review no longer reliably triggers stars in SERPs. To get reliable star results, you typically need real user reviews. The schema is still emitted for accuracy and downstream consumers (Bing, DuckDuckGo, social previews).
Blog post schema
Every published blog post emits a Person + Organization + BlogPosting graph:
jsonld
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Person", "@id": "...#person", "name": "...", ... },
{
"@type": "Organization",
"@id": "https://example.com#organization",
"name": "Site name",
"url": "https://example.com",
"logo": { "@type": "ImageObject", "url": "..." }
},
{
"@type": "BlogPosting",
"@id": "...#blog-posting",
"headline": "...",
"mainEntityOfPage": { "@type": "WebPage", "@id": "..." },
"datePublished": "...",
"dateModified": "...",
"image": "...",
"description": "...",
"author": { "@id": "...#person" },
"publisher": { "@id": "...#organization" }
}
]
}Pulled from:
- Person - the post's Post Author field (Author CPT, not WordPress user). Same field set as the product Person node.
- Organization - the site name + URL + the Site logo set in Theme Settings → General.
- BlogPosting.headline - post title.
- BlogPosting.image - the post's featured image.
- BlogPosting.description - the post's excerpt.
- BlogPosting.datePublished / dateModified - the post's published and last-modified dates.
Author schema
Author CPT pages emit a single Person document with the same fields as the embedded Person nodes on products and blog posts - name, url, image, jobTitle, description, knowsAbout, sameAs.
This is the E-E-A-T story: Google wants to see who wrote the review, what they know, and where else they exist online. Filling out the Author CPT thoroughly is the single biggest SEO move you can make on this theme.
FAQ schema
When you add an FAQ block to any page, the block's items are emitted as FAQPage schema:
jsonld
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{ "@type": "Question", "name": "...", "acceptedAnswer": { "@type": "Answer", "text": "..." } }
]
}The schema is rendered by the block itself, in-line where the FAQ accordion appears. FAQ schema requires the answers to be present in the DOM (which Converto satisfies even when items are collapsed).
Breadcrumb schema
The breadcrumb component emits BreadcrumbList whenever there's more than one crumb on the page (i.e. you're not on the site root):
Home › Web Hosting › BluehostEach crumb becomes a ListItem with position, name, and the destination URL.
The filter takes no arguments and should return an ISO 4217 currency code.
Verifying schema output
Two tools:
- Google Rich Results Test - search.google.com/test/rich-results. Paste a product / blog / author URL; Google validates and shows a preview.
- Schema.org Validator - validator.schema.org. More permissive; good for spotting structural issues.