build_schema
Render a news post's HTML body with NewsArticle and FAQPage JSON-LD, validate schema-to-content consistency, and return a paste-ready block plus metadata.
Instructions
Step 9. Render the HTML body and both JSON-LD blocks, then check them.
article: {headline, description (110-160 chars, used as the meta
description), intro:[str,str] (exactly two), sections:[{heading,
paragraphs:[str], bullets?:[str]}] (4-6), cta (one closing sentence that
must contain CTA_LINK_TEXT verbatim so it renders as a link),
date_published?, author?, slug?, url?, meta_title?, section?, language?,
include_h1?}
faq: [{question, answer}] - 4 to 8 entries
image: {url, alt, title?, caption?} - url must be the public https URL
references: [{title, url, publisher?}] - real fetched URLs only
keywords: the primary and secondary keywords from seo_keywords; they go into
NewsArticle.keywords and come back in meta for save_and_present
Pure templating, no model call. Renders the house body format: 720px container, inline styles, banner, byline, hr-separated H2 sections, FAQ as H3/P pairs, references as an ordered list. By default the body carries NO H1 because Blogger renders the post title itself - set BODY_INCLUDES_H1=true if your platform does not.
Returns paste_block, which is both JSON-LD scripts followed by the body,
ready to paste into the post editor, and meta - pass that straight to
save_and_present so the head, the schema and the body cannot drift apart. Returns validation.issues listing every
mismatch found: FAQ questions that differ between the HTML and the FAQPage
schema, an image URL that differs between the tag and NewsArticle.image,
references missing from the body. Fix the issues and call again rather than
publishing output with a non-empty issues list.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| faq | Yes | ||
| image | Yes | ||
| article | Yes | ||
| keywords | No | ||
| references | Yes |