JSON-LD Generator

️ Nested Schema & @id Linking: The Ultimate SEO Architecture Guide (2026) UPDATED AUGUST 2026

Reviewed for current guidance: This article was checked against Google Search Central and Schema.org documentation in August 2026. Valid markup can make a page eligible for a feature; Google does not guarantee a rich result or ranking.

When you markup a product page, you're not just telling Google "this is a phone." You must explain that these reviews relate to this product, and this FAQ answers questions specifically about it. Without using @id, search engines see disconnected entities, not a unified structure.

[WebPage] --mainEntity--> [Product] --review--> [Review]
                                      --subjectOf--> [FAQPage]
                                      --position--> [BreadcrumbList]

🚀 New in 2026: Visual @graph Builder with practical examples

Our JSON-LD Generator now includes practical features for building complex semantic graphs:

🔗 @graph Mode Link entities with @id references when the relationships are accurate
🔬 Search-style Preview Review an illustrative preview of how your interconnected schema will appear in Google search results
📊 Quality guidance Real-time validation ensures your @graph structure meets current guidance
⚡ One-Click Export Export optimized @graph code for WordPress, Shopify, Webflow, and more

1. The Problem of "Disconnected Blocks"

Common mistake: insert one script for Breadcrumbs, another for Product, a third for FAQ. For Google, these are three separate contexts.

❌ BEFORE: Disconnected Schema

Google sees:

  • 1 isolated Product
  • 1 isolated FAQPage
  • 1 isolated BreadcrumbList
  • No relationships between them

Result: Google must guess connections, potentially misinterpreting your page structure.

✅ AFTER: Unified Data Graph

Google sees:

  • 1 cohesive Product entity
  • FAQPage linked via subjectOf
  • BreadcrumbList providing hierarchy
  • All entities interconnected

Result: Google understands complete page semantics and relationships.

2. @id Magic: Creating Unique Anchors

The @id field is a unique identifier for an entity. Typically, it's the page URL with a hashtag anchor. For example:

🎯 Best Practice: Always Use Canonical URLs

Always use the canonical URL of the page as the base for your @id values. This prevents issues if the page is accessible through different URLs (with parameters or without). For example:

  • Good: https://site.com/product/iphone-15#product
  • Avoid: https://site.com/product/iphone-15?ref=promo#product
  • Also avoid: https://site.com/product/iphone-15/#product (trailing slash inconsistencies)

3. Architectural Example (Complete Graph)

Here's how to combine Product, Reviews, Rating, FAQ, and Breadcrumbs into one seamless chain within a single <script> tag:


{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebPage",
      "@id": "https://example.com/iphone-15",
      "name": "iPhone 15 Pro Product Page",
      "description": "Official page for iPhone 15 Pro with reviews and FAQ",
      "breadcrumb": { "@id": "https://example.com/iphone-15#breadcrumb" },
      "mainEntity": { "@id": "https://example.com/iphone-15#product" }
    },
    {
      "@type": "Product",
      "@id": "https://example.com/iphone-15#product",
      "name": "iPhone 15 Pro",
      "image": [
        "https://example.com/images/iphone-15-front.jpg",
        "https://example.com/images/iphone-15-back.jpg"
      ],
      "description": "Latest Apple smartphone with A17 Pro chip",
      "brand": {
        "@type": "Brand",
        "name": "Apple",
        "@id": "https://example.com/brands/apple#brand"
      },
      "sku": "IP15P-256-BLK",
      "gtin13": "0194254338932",
      "offers": {
        "@type": "Offer",
        "price": "999",
        "priceCurrency": "USD",
        "priceValidUntil": "2026-12-31",
        "availability": "https://schema.org/InStock",
        "url": "https://example.com/iphone-15",
        "shippingDetails": {
          "@type": "OfferShippingDetails",
          "shippingRate": {
            "@type": "MonetaryAmount",
            "value": "0",
            "currency": "USD"
          },
          "shippingDestination": {
            "@type": "DefinedRegion",
            "addressCountry": "US"
          }
        }
      },
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "4.9",
        "reviewCount": "850",
        "bestRating": "5",
        "worstRating": "1"
      },
      "review": [
        {
          "@type": "Review",
          "@id": "https://example.com/iphone-15#review-1",
          "author": {
            "@type": "Person",
            "name": "John Doe",
            "url": "https://example.com/users/johndoe"
          },
          "reviewRating": {
            "@type": "Rating",
            "ratingValue": "5",
            "bestRating": "5"
          },
          "reviewBody": "Excellent battery life and camera quality.",
          "datePublished": "2026-01-10"
        },
        {
          "@type": "Review",
          "@id": "https://example.com/iphone-15#review-2",
          "author": {
            "@type": "Person",
            "name": "Jane Smith"
          },
          "reviewRating": {
            "@type": "Rating",
            "ratingValue": "4",
            "bestRating": "5"
          },
          "reviewBody": "Great phone but a bit expensive.",
          "datePublished": "2026-01-15"
        }
      ],
      "subjectOf": { "@id": "https://example.com/iphone-15#faq" }
    },
    {
      "@type": "FAQPage",
      "@id": "https://example.com/iphone-15#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Is it water resistant?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes, iPhone 15 Pro has an IP68 rating, meaning it can withstand submersion in up to 6 meters of water for 30 minutes."
          }
        },
        {
          "@type": "Question",
          "name": "Does it support 5G?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes, iPhone 15 Pro supports all major 5G bands worldwide."
          }
        }
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://example.com/iphone-15#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://example.com/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Smartphones",
          "item": "https://example.com/category/smartphones"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Apple",
          "item": "https://example.com/category/smartphones/apple"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "iPhone 15 Pro",
          "item": "https://example.com/iphone-15"
        }
      ]
    }
  ]
}

🧠 Why This Works Perfectly

We used the @graph array. This tells Google: "Here's the map of my content." We connected FAQ to Product via the subjectOf field using only @id. We also included the WebPage entity and linked everything together with Breadcrumbs. This can make genuine semantic relationships easier to inspect; it does not guarantee a Google result.

Key relationships established:

  • WebPage → Product (mainEntity)
  • Product → Reviews (review)
  • Product → FAQ (subjectOf)
  • WebPage → Breadcrumbs (breadcrumb)

Review warnings and complete applicable fields - Our generator validates @graph structure automatically!

Common "Nesting" Mistakes

  • Circular References: Don't reference an object that references you back (Product -> FAQ -> Product). This can confuse parsers.
  • Protect Your @id: If you change the ID format (was #prod, became #item), Google may perceive this as new, unrelated data.
  • Missing Canonical Consistency: Mixing www and non-www versions in @id values creates duplicate entities.
  • Over-Nesting: Don't nest more than 3-4 levels deep. Keep your graph reasonably flat for better parser performance.
  • Missing shippingDetails (2026): Google now requires explicit shipping information in Offer schema for e-commerce.

🎯 PRO Tip: Testing Your Graph

After implementing your @graph structure, test it with Google's Rich Results Test Schema Validator Generator to build complex graphs with automatic validation and quality guidance.

🚀 Want to Build a Complex Graph?

Our tool generates JSON-LD with optional @graph mode, visual examples, field guidance, and export for e-commerce, SaaS, and content-heavy sites.

Generator

Free • No registration • Quality guidance • Schema preview

Need help? Check our implementation guide for frameworks.

Related Articles

Next step

Connect entities without losing clarity

Use stable @id links for related entities, review the generated graph, and validate the published page.

Generator Audit a live URL first