Skip to content

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 typeWhere it appearsWhat it powers
Person + Product + ReviewSingle product pages (@graph)Star ratings, product info card, byline
Person + Organization + BlogPostingSingle blog posts (@graph)Article rich result, byline, publisher
PersonSingle author pagesAuthor profile, E-E-A-T signals
FAQPageAny page that contains an FAQ blockCollapsible Q&A in search results
BreadcrumbListAny page where the breadcrumb has more than one crumbBreadcrumb 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. ratingValue is the global rating, reviewCount is 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). price is the numeric part of the price field; priceCurrency defaults to USD and can be filtered (see below); availability is always InStock; url is 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).

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 › Bluehost

Each 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:

  1. Google Rich Results Test - search.google.com/test/rich-results. Paste a product / blog / author URL; Google validates and shows a preview.
  2. Schema.org Validator - validator.schema.org. More permissive; good for spotting structural issues.

What's next

  • Make sure your Author data is complete - biggest single SEO lever.
  • Configure the Site logo so the Organization node has a logo.

KrafterSuite Documentation