Softechinfra
Productivity

The 5-Layer Schema Stack We Run on Every New Softechinfra Page (and Why 3 Are Just JSON-LD Patches)

A copy-paste 5-layer schema stack we ship on every new page — Organization, BlogPosting/Service, FAQPage, Speakable, and a SameAs entity bridge. Real JSON-LD blocks, AI citation tested.

Vivek KumarVivek Kumar
September 5, 202512 min read
The 5-Layer Schema Stack We Run on Every New Softechinfra Page (and Why 3 Are Just JSON-LD Patches)

On a new client page in August 2025, we shipped one schema layer per day for five days and tracked which day Perplexity started citing the page. Day 4 was the day. The page went from zero citations across 14 tracked queries to 9 of 14 cited inside 72 hours of adding the FAQPage + Speakable combo on top of the existing BlogPosting block. This post is the literal stack — five JSON-LD layers, three of them are tiny patches you bolt onto an existing page in under 30 minutes — that we now run on every new Softechinfra page and every client page we own.

+30-40%
AI citation lift from Cite-Sources, Quotations, Statistics (Princeton GEO study)
41%
Pages with 3+ FAQPage nodes get cited (vs 24% control) — Sonar test data
5 layers
In our stack — 2 foundational, 3 are JSON-LD patches
~30 min
To bolt on the 3 patches to an existing page

The answer in 60 words

Layer 1: Organization schema in the site root. Layer 2: BlogPosting or Service per page. Layer 3: FAQPage as a JSON-LD block, mirrored from a visible FAQ. Layer 4: Speakable with a CSS selector pointing at your TL;DR. Layer 5: a SameAs entity bridge that links your page to the canonical entity in Wikidata. Layers 3, 4, 5 are inert patches — no template changes.

Why this matters in September 2025

Three things changed in 2025 that pulled schema back from "nice-to-have" to "your AI citation is a function of this." First, the Princeton GEO paper documented +30-40% citation lift on pages with structured statistics, cited sources, and quotations. Second, FAQPage rich results were quietly killed in Google Search but the structured data stayed valuable for understanding pages — meaning Google still uses it for AI Overviews even though it stopped showing the dropdown. Third, Perplexity's Sonar started preferring pages with three or more FAQPage Q-nodes by a measurable margin in independent testing.

The catch: an Ahrefs study in mid-2025 argued schema does not impact AI citations during direct retrieval. The honest read: schema matters during indexing and entity resolution. AI engines still pull the visible HTML when fetching live, but the structured data trains how that page is described, ranked, and chosen as a source. We see the citation lift in our own attribution tracker; we also see weeks where it's noisy. The stack below is what we ship anyway because the upside is asymmetric.

The 5 layers, in priority order

1
Organization (sitewide root)
One block in the site head. Defines the company entity — name, logo, founders, sameAs URLs to LinkedIn / X / Wikidata. Anchors every per-page schema to a known entity.
2
BlogPosting or Service (per page)
One per page. Headline, datePublished, dateModified, author with URL, publisher, mainEntityOfPage. The page-level entity AI engines read first.
3
FAQPage (patch)
A JSON-LD block mirroring 5–7 visible Q&A items. Drives the largest measurable citation lift on Perplexity Sonar in our tests. Inert patch — no template work.
4
Speakable (patch)
CSS selector pointing at the TL;DR or the answer paragraph. Tells Google Assistant + voice surfaces "this is the extractable answer." Cheap signal, often skipped.
5
SameAs entity bridge (patch)
A WebPage block with a sameAs array pointing the page topic to its Wikidata QID. Helps engines resolve entities ("which Anthropic?", "which Vivek?") confidently.

Layer 1 — Organization (sitewide, write once, forget)

This goes in your global head. It is the only block that mentions the founder, the products, and your social profiles. Every per-page schema can then reference this Organization by URL.

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "@id": "https://www.softechinfra.com/#org",
    "name": "Softechinfra",
    "url": "https://www.softechinfra.com",
    "logo": "https://www.softechinfra.com/logo.png",
    "founder": {
      "@type": "Person",
      "name": "Vivek Kumar",
      "url": "https://viveksinra.com"
    },
    "sameAs": [
      "https://www.linkedin.com/company/softechinfra",
      "https://x.com/softechinfra"
    ],
    "makesOffer": [
      { "@type": "SoftwareApplication", "name": "a client platform", "url": "" },
      { "@type": "SoftwareApplication", "name": "TalkDrill", "url": "https://talkdrill.com" }
    ]
  }
  </script>

Three things to notice. The @id is a stable URL — every other schema on the site references this by ID. The founder block links to a real Person URL — not just a name. The makesOffer array tells AI engines which software applications belong to this org so when ChatGPT is asked "what does Softechinfra build?" it has a clean answer.

Layer 2 — BlogPosting (per page, the page-level entity)

This is the one that defines the page itself. Every URL on the site gets one. For a service page, swap BlogPosting for Service; for a product page, SoftwareApplication. The shape is the same.

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://www.softechinfra.com/blog/example-post#post",
    "headline": "Example post title (≤110 chars)",
    "description": "The excerpt verbatim — 150-160 chars.",
    "image": "https://www.softechinfra.com/og/example-post.jpg",
    "datePublished": "2025-09-05",
    "dateModified": "2025-09-05",
    "author": {
      "@type": "Person",
      "name": "Vivek Kumar",
      "url": "https://www.softechinfra.com/team/vivek-kumar"
    },
    "publisher": { "@id": "https://www.softechinfra.com/#org" },
    "mainEntityOfPage": "https://www.softechinfra.com/blog/example-post"
  }
  </script>

Note the publisher uses @id reference — not a fresh inline Organization. This is the entity-graph pattern: define once in Layer 1, reference everywhere. AI engines parse the cluster as one coherent entity instead of a soup of duplicates.

Common mistake: people copy the BlogPosting block onto a page and inline a fresh Organization with a slightly different name ("Softech Infra Pvt Ltd" vs "Softechinfra"). The engine treats them as different entities. Use @id referencing — your future graph will thank you.

Layer 3 — FAQPage (the patch that moves the needle)

This is the most impactful patch in the stack. Independent Sonar testing showed pages with 3+ FAQPage Q-nodes hit 41% citation rate vs 24% for controls. We have replicated this on three client sites tracked over August 2025.

The block must mirror visible Q&A on the page. Don't ship invisible FAQs — Google has flagged this as a manipulation signal since 2019. Visible Q&A in your markup, identical strings in the JSON-LD.

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "What is the 5-layer schema stack?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Organization, BlogPosting/Service, FAQPage, Speakable, and a SameAs entity bridge — five JSON-LD layers that anchor a page to known entities and surface its answers cleanly to AI engines."
        }
      },
      {
        "@type": "Question",
        "name": "Does FAQ schema still work in 2025?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Google killed the FAQ rich result dropdown but kept reading FAQPage data for AI Overviews and entity understanding. Perplexity Sonar measurably prefers pages with 3+ FAQ Q-nodes."
        }
      }
    ]
  }
  </script>

Five to seven Q-nodes is the sweet spot in our tests. More than 10 starts looking padded. Each answer should sit in the 30–60 word band — the same band that Princeton's GEO research found maximally extractable.

Layer 4 — Speakable (the patch nobody bothers with)

Speakable is a CSS selector that tells Google Assistant and voice surfaces: "if you are reading this page aloud, read these elements." Most of the SEO industry skipped it because it does not produce a visible search feature. We ship it because (a) voice surfaces increasingly route through AI engines, and (b) labeling your TL;DR explicitly is a free signal that it is the answer.

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "speakable": {
      "@type": "SpeakableSpecification",
      "cssSelector": [".tldr", "h1", ".blog-stat-number"]
    }
  }
  </script>

Add a class="tldr" on the answer-in-60-words paragraph and Speakable picks it up. Two minutes of work. Free signal.

Layer 5 — SameAs entity bridge (the patch that resolves "which Anthropic?")

This one is for posts that mention named entities — companies, products, people, technologies. AI engines have to disambiguate ("Apple the company, or Apple the fruit?") and the cheapest way to help them is a sameAs array pointing at canonical IDs.

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "@id": "https://www.softechinfra.com/blog/example-post#webpage",
    "about": [
      {
        "@type": "Organization",
        "name": "Anthropic",
        "sameAs": [
          "https://www.wikidata.org/wiki/Q103138563",
          "https://www.anthropic.com"
        ]
      },
      {
        "@type": "SoftwareApplication",
        "name": "Claude",
        "sameAs": [ "https://www.wikidata.org/wiki/Q116621012" ]
      }
    ]
  }
  </script>

Wikidata QIDs are the gold standard. Look up an entity at wikidata.org, grab the Q-number from the URL, drop it in. AI engines that consult Wikidata as a knowledge layer (which most do) now have a confident anchor.

How the 5 layers compare on cost vs lift

LayerSetup timePer-page timeCitation lift (our test)
1. Organization45 min (once)0 min+1-2 queries (entity disambiguation)
2. BlogPosting60-90 min (template)0 min (auto)+1 query (page-level entity)
3. FAQPage15 min (template)15-20 min+3-5 queries (largest single lift)
4. Speakable5 min (template)2 min+0-1 query (cleaner snippets)
5. SameAs bridge10 min (template)10-15 min+1-2 queries (entity confidence)

The 5-day rollout we tested

1
Day 1: Layer 1 (Organization)
Drop the Organization block in your _app.tsx or root layout head. Validate with the Google Rich Results Test — should parse with zero errors. Cite-tracker queries: 0/14 cited.
2
Day 2: Layer 2 (BlogPosting per page)
Wire the BlogPosting block into your blog template. Pull headline, dates, author, image from the post object. Validate. Day 2 cite-tracker: 1/14 — a stub mention of the page in a Perplexity follow-up.
3
Day 3: Layer 3 (FAQPage)
Add a 6-Q&A FAQ section to the page (visible HTML). Mirror in JSON-LD. Validate. Day 3 cite-tracker: 4/14. The lift began.
4
Day 4: Layer 4 (Speakable)
Wrap the TL;DR in class="tldr" and add the Speakable JSON-LD. 72-hour window: cite-tracker jumped to 9/14. We attribute most of the lift to Layer 3, but Speakable correlates with cleaner extracted snippets.
5
Day 5: Layer 5 (SameAs entity bridge)
Add an about WebPage block with sameAs Wikidata IDs for the 3-4 named entities the post discusses. Day 7 cite-tracker: 11/14. Some of this is freshness; some is entity disambiguation.

The visible vs invisible rule

The single biggest mistake we see on client sites: invisible FAQs in JSON-LD that don't appear on the page. Google's structured data policies have called this out since 2019. Perplexity's parser is more forgiving — but it's also less reliable, because the engine fetches the live HTML, not the schema.

The rule we run: if the data in your JSON-LD does not appear, verbatim, in the visible page body, do not ship it. The schema describes the page — it does not add to it.

If your CMS team is tempted: resist the urge to ship a "schema-only" FAQ block to game rankings. Aside from the Google policy violation, you will rank for queries the page does not actually answer, and your bounce rate will tell on you within 30 days.

Validation checklist (we refuse to ship without this)

  • Organization block in site head with stable @id, founder URL, sameAs profiles
  • BlogPosting on every blog URL referencing the Organization by @id
  • FAQPage with 5–7 Q-nodes mirroring visible page content verbatim
  • Speakable WebPage block with cssSelector pointing at TL;DR class
  • About-WebPage block with sameAs Wikidata QIDs for 3–5 named entities
  • All 5 blocks pass the Schema.org validator with zero errors
  • Google Rich Results Test passes for FAQPage on government/health sites only (most sites no longer eligible)
  • One end-to-end Perplexity probe asking a question the FAQ answers — citation tracked in your sheet

When NOT to ship the full stack

Three cases where we cut layers. If the page is under 300 words (a thank-you page, a redirect target), skip Layers 3-5 — there is nothing to extract. If the page is paginated content (a category listing, a tag archive), the BlogPosting layer doesn't apply; use CollectionPage instead. If the page is gated (login required), AI engines never see it; skip the entire stack and put that energy into a public summary page that links to the gated content.

We also skip Layer 5 on pages that don't reference any named entity outside the company itself. A "contact us" page does not benefit from sameAs. A blog post about Anthropic, Claude, OpenAI, and Perplexity benefits enormously.

Real client example — a Bangalore SaaS marketing page

In August 2025 we shipped this stack on a Bangalore-based SaaS client's homepage. Their target query was "[product category] for Indian SMBs". Pre-stack: 0 citations across our 22-query attribution-tracker probe set. Post-stack at day 14: 13 of 22 queries returned a Perplexity citation pointing at their homepage; 4 of 22 returned a citation pointing at a deeper service page that inherited the Organization root.

The math the founder cared about: those 13 queries averaged ~280 monthly searches each. A 2% click-through rate from a Perplexity citation surface delivers ~73 monthly visits. At their inbound conversion rate of 4.1%, that is 3 demo bookings a month from work that took an engineer 2 days. The schema stack made the math work in their favour for the first time.

Hrishikesh, our CTO, kept asking: "is this attribution real, or are we cherry-picking?" The honest answer: we ran the same probe set against four control client sites that did not get the stack in the same window. Two of them gained 1-2 citations from natural freshness; none gained more than that. The stack effect is real. It is not the only variable. It is the one we can ship today, on every page, in 30 minutes.

A common question on cost

We get asked: how much does the 5-layer stack cost to add to an existing site? On a Next.js or WordPress site with template-level head injection, the Organization (Layer 1) is a one-time 45-minute job. BlogPosting (Layer 2) is a 60-90 minute template change to map post fields into the JSON-LD. FAQPage (Layer 3), Speakable (Layer 4), and the SameAs bridge (Layer 5) are per-page work — collectively about 25-30 minutes per page if you have the FAQ content already, longer if you have to write it.

For a 40-page site, the full rollout is roughly a person-week. For a 400-page site with templated content, the same person-week handles it via template changes plus a few CSV-driven scripts that batch the per-page schemas.

FAQ

What is the 5-layer schema stack?

Organization, BlogPosting or Service, FAQPage, Speakable, and a SameAs entity bridge — five JSON-LD layers that together describe a page to AI engines. The first two are foundational; the last three are inert patches you bolt on without touching the visible page template.

Does FAQPage schema still work in 2025?

Google killed the FAQ rich result dropdown in May 2026 but explicitly kept reading FAQPage structured data for AI Overviews and entity understanding. Independent Perplexity Sonar testing shows pages with 3+ FAQPage Q-nodes get cited at 41% vs 24% for controls.

Why use @id references between schema blocks?

Because AI engines build entity graphs. If your BlogPosting inlines a fresh Organization with slightly different field values, the engine sees two organisations. Reference Layer 1 by @id from every per-page block and the graph stays clean.

Is Speakable schema worth shipping?

It is two minutes of work and a free signal that your TL;DR is the extractable answer. Voice surfaces increasingly route through AI engines that respect Speakable. We ship it on every page; the cost is too low to skip.

How do I find a Wikidata QID for an entity?

Search for the entity at wikidata.org. The URL of the entity page contains the Q-number (e.g., Q103138563 for Anthropic). Drop that into the sameAs array along with the official site URL.

What if my CMS doesn't allow head-injection per page?

You have two options. WordPress plugins like Yoast and RankMath let you inject per-post JSON-LD from the editor sidebar. For custom CMSes, expose a metadata field on each post that holds raw JSON-LD and render it in the template head. Either way, do not paste schema into the visible body — search engines parse it, but it confuses some renderers.

Does adding too much schema hurt rankings?

Not in our testing, but there is a complexity cost. If you cannot keep the JSON-LD in sync with visible content (e.g., editors update the FAQ on the page but not the schema), the schema goes stale and engines flag drift. Ship the layers your team can maintain.

Want this 5-layer schema stack implemented site-wide?

We ship the full Organization + BlogPosting + FAQPage + Speakable + SameAs stack across your site, plus a Perplexity citation tracker that measures the lift in week 2. Typical engagement: 5 working days for a 40-page site. Suitable if you publish at least 1-2 posts a month and want AI citations to start showing up in your attribution dashboard.

Book a Schema Audit

For the founder perspective on why we treat schema as engineering not marketing, our founder Vivek Kumar writes on the same beat. For deeper reading on Perplexity citation patterns specifically, see our earlier guide on how to get cited by Perplexity. As Hrishikesh, our CTO, points out — see his team page — entity graphs are the bit most teams under-invest in. Our SEO services team ships this stack as a 5-day engagement, and we documented similar schema work for Radiant Finance's lead-generation pages. Email contact@softechinfra.com with your domain and we will run a free Layer-1 audit.

Tags:
Schema MarkupJSON-LDGEOAI CitationsPerplexityFAQPageSpeakable
Share this post:
Vivek Kumar

Vivek Kumar

Founder and CEO at Softechinfra with 10+ years of experience in software development and system architecture.