eg

schema markup generator.

product, breadcrumb, faq, onlinestore & website json-ld, combined into one @graph

store platform
include schema types
currency
availability
condition

> json-ld preview

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Product",
      "name": "ACME Trail Runner Pro",
      "description": "Lightweight trail running shoes with a Vibram outsole and breathable engineered mesh upper. Waterproof tongue, 4mm drop, 280g per shoe.",
      "sku": "ACME-TR-PRO-42",
      "brand": {
        "@type": "Brand",
        "name": "ACME Outdoor"
      },
      "gtin": "0812345678901",
      "mpn": "TRP-2025-42",
      "image": "https://acmeoutdoor.com/cdn/products/trail-runner-pro-1200.jpg",
      "category": "Apparel > Shoes > Running Shoes",
      "offers": {
        "@type": "Offer",
        "price": "149.00",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "itemCondition": "https://schema.org/NewCondition",
        "url": "https://acmeoutdoor.com/products/trail-runner-pro?variant=42",
        "priceValidUntil": "2026-12-31",
        "shippingDetails": {
          "@type": "OfferShippingDetails",
          "shippingRate": {
            "@type": "MonetaryAmount",
            "value": "0.00",
            "currency": "USD"
          },
          "shippingDestination": {
            "@type": "DefinedRegion",
            "addressCountry": "US"
          }
        },
        "hasMerchantReturnPolicy": {
          "@type": "MerchantReturnPolicy",
          "applicableCountry": "US",
          "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
          "merchantReturnDays": 30,
          "returnMethod": "https://schema.org/ReturnByMail",
          "returnFees": "https://schema.org/FreeReturn"
        }
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://acmeoutdoor.com/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Trail Running",
          "item": "https://acmeoutdoor.com/collections/trail-running"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Shoes",
          "item": "https://acmeoutdoor.com/collections/trail-running-shoes"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Trail Runner Pro",
          "item": "https://acmeoutdoor.com/products/trail-runner-pro"
        }
      ]
    }
  ]
}
</script>

> worked example

A Shopify merchant generates structured data for a trail-running shoe PDP. They toggle on Product, BreadcrumbList, and FAQPage, edit the four-level breadcrumb trail (Home → Trail Running → Shoes → Trail Runner Pro) and three shipping / returns / sizing FAQs. The Product block includes SKU, GTIN, MPN, brand, price, currency, availability, shipping details, and a 30-day MerchantReturnPolicy. All three types render as a single @graph JSON-LD block wrapped in a <script> tag, ready to paste into the theme.liquid file.

takeaway, A single @graph output, rather than three separate JSON-LD blocks, keeps the document head clean and lets Google parse the relationships between types in one pass.

> when operators reach for this

  • Shopify merchants adding Product + BreadcrumbList + FAQPage to every PDP to qualify for Google rich results.
  • WooCommerce SEO leads combining OnlineStore + WebSite schema on the homepage to enable the sitelinks search box.
  • Agencies building structured-data templates for a client site migration, copy-paste markup with the right fields for every page template.
  • Ecommerce developers generating JSON-LD to feed into Next.js / Remix server components without hand-writing the types.
  • Headless commerce teams prototyping schema for a new catalogue before wiring it into the CMS pipeline.
  • Brands preparing for AI shopping assistants, using MerchantReturnPolicy and shippingDetails to make offer terms machine-readable for ChatGPT and Perplexity.

> the calculation

  • product fieldsname · description · sku · brand · gtin · image · offers.price · offers.priceCurrency · offers.availability
  • offer extensionsshippingDetails (cost, destination) + hasMerchantReturnPolicy (days, fees, method)
  • breadcrumb listordered ListItems, position 1 = Home, last = current page
  • faq pageQuestion → acceptedAnswer.text pairs · each answer ≤ 500 chars for rich results
  • onlinestoreOnlineStore subtype of Organization, add areaServed, paymentAccepted, hasMerchantReturnPolicy
  • website + searchactionenables the Google sitelinks search box on brand SERPs
  • @graph wrappingmultiple @types share one @context when wrapped in a single @graph array

> related calculators, seo & metadata