FAQ sections on this blog: frontmatter, HTML, and JSON-LD

On brenthaskins.com, FAQPage JSON-LD is emitted only when a post has at least two valid FAQ objects in markdown frontmatter; each must include question and answer strings parsed in lib/blog.ts. The template renders a visible FAQ block before JSON-LD is built—matching Google's requirement that structured data reflect on-page content.

FAQ markup here is conditional code, not a site-wide default.

Parse step (lib/blog.ts)

Frontmatter faqs is an array. Each item must be an object with non-empty question and answer strings. Malformed entries are skipped silently— they do not partially render.

There is no FAQ section in the markdown body. Authors put Q&A in YAML only.

Render step (app/blog/[slug]/page.tsx)

If post.faqs.length > 0, the page prints:

  • Section label “FAQ”
  • H2: “Questions people ask about this topic.”
  • Each item: H3 question, paragraph answer

Only after that does buildFaqJsonLd run. If length is under two, no FAQPage JSON-LD is added.

BlogPosting always present

Every post gets BlogPosting JSON-LD with author Person, dates from frontmatter date and optional updated, and citation array from sources.

Authoring guidance (this site only)

Good FAQs on this blog answer calls Brent actually gets:

  • “What did you ship for mortgage brokers?”
  • “How is Formably different on pricing?”

Bad FAQs:

  • “Why is software important?”
  • Copy-paste the summary verbatim as the answer

The automated post script enforces minimum answer word count on generated drafts. Manual posts rely on editorial judgment.

Google policy reminder

Google documents that FAQ structured data must not be used for advertising-heavy or repetitive pages across a site. This blog has dozens of posts; do not paste identical FAQ pairs into every file. That pattern looks like scaled markup abuse.

Measure, do not guess

After deploy, use Google’s Rich Results Test on a live URL. If FAQ is invalid, fix frontmatter—not the schema templates.

Project-grounded example FAQs: mortgage broker site, Formably brand contract.

Brent Haskins — built the template; FAQs exist to help readers and recruiters, with schema as a faithful mirror of visible text.

Questions people ask about this topic.

When does a blog post on brenthaskins.com get FAQPage schema?

When post.faqs.length is two or more after parsing. parseBlogPost in lib/blog.ts drops FAQ entries missing question or answer. buildFaqJsonLd in app/blog/[slug]/page.tsx returns undefined if fewer than two FAQs exist, so no FAQPage script tag is output. The FAQ headings and answers still render in a section labeled FAQ for all valid pairs.

Does FAQ schema improve rankings on this site?

Schema enables eligible rich results when Google chooses to show them; it is not a ranking lever by itself. Brent Haskins uses FAQs to answer hiring and product questions clearly in HTML. Improvement in traffic or AI citations, if any, must be measured in Search Console and analytics—not assumed from adding JSON-LD.

Referenced sources