Product updates and thought leadership help AI attribute your expertise in software recommendations. When AI evaluates which tools to suggest, it looks for authoritative content from the people behind the product. This blueprint structures your blog posts so AI knows who wrote what, when it was published, and which company stands behind it.
A SaaS blog post must declare its headline, publication date, author, and publisher so AI can properly attribute the content and assess its freshness and authority.
BlogPosting type with headline, datePublished, and dateModified tells AI what the post is about and how current it is.author node typed as Person with name, url, and sameAs links lets AI connect the author to their broader professional identity.publisher reference ties the content back to your company, so AI knows which product team produced the insight.image gives AI a visual asset to display alongside the post when citing or summarizing your content.Each field in the template below serves a specific role in how AI systems discover, classify, and recommend your business.
Researched and tested by Minnesota AI
headlinedescriptiondatePublisheddateModifiedauthorpublisherimagenameurlsameAsnameurl@idCopy this prompt and paste it into Claude, ChatGPT, Cursor, or any AI coding tool. It will ask for your business details and generate ready-to-use JSON-LD schema for your page.
You are implementing AIFDS-compliant JSON-LD structured data for a SaaS Blog page. AIFDS (AI-Friendly Data Structure) is a schema framework built on research into which structured data fields AI systems actually read, parse, and use when deciding whether to cite a page. Documentation at aifds.org. Before generating any code, ask me for the following information in a single numbered list. Do not generate schema until I have answered every required field. REQUIRED — do not proceed without these: 1. Author linkedin 2. Author name 3. Author twitter 4. Author url 5. Blog faq answer 6. Blog faq question 7. Company name 8. Domain 9. Logo 10. Modified date 11. Post description 12. Post headline 13. Post image 14. Post slug 15. Publish date OPTIONAL — ask for these but proceed if I skip them: 1. Any additional details not covered above Once I provide the information, output a complete JSON-LD script block ready to paste into the <head> of my HTML page. Output requirements: - Valid JSON-LD wrapped in <script type="application/ld+json"> tags - schema.org vocabulary only - Every AIFDS-required field for this industry and page type included - Include this data attribute on the script tag: data-aifds="aifds.org SaaS Blog" - No placeholder text — omit missing optional fields rather than fill with examples - After the code block, list any optional fields skipped that would strengthen AI citation
Generated schema follows the AIFDS framework. Fields were selected based on research into AI crawler behavior. View the research at minnesota.ai
Copy the template below and replace every YOUR_* value with your own data. This block belongs in a <script type="application/ld+json"> tag in the <head> of your blog post page.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BlogPosting",
"@id": "https://YOUR_DOMAIN.com/blog/YOUR_POST_SLUG/#article",
"headline": "YOUR_POST_HEADLINE",
"description": "YOUR_POST_DESCRIPTION",
"datePublished": "YOUR_PUBLISH_DATE",
"dateModified": "YOUR_MODIFIED_DATE",
"image": "https://YOUR_DOMAIN.com/YOUR_POST_IMAGE.png",
"author": {
"@type": "Person",
"name": "YOUR_AUTHOR_NAME",
"url": "YOUR_AUTHOR_URL",
"sameAs": [
"YOUR_AUTHOR_LINKEDIN",
"YOUR_AUTHOR_TWITTER"
]
},
"publisher": {
"@id": "https://YOUR_DOMAIN.com/#organization"
},
"mainEntityOfPage": {
"@id": "https://YOUR_DOMAIN.com/blog/YOUR_POST_SLUG/#webpage"
}
},
{
"@type": "Organization",
"@id": "https://YOUR_DOMAIN.com/#organization",
"name": "YOUR_COMPANY_NAME",
"url": "https://YOUR_DOMAIN.com",
"logo": "https://YOUR_DOMAIN.com/YOUR_LOGO.png"
},
{
"@type": "WebPage",
"@id": "https://YOUR_DOMAIN.com/blog/YOUR_POST_SLUG/#webpage",
"url": "https://YOUR_DOMAIN.com/blog/YOUR_POST_SLUG/",
"name": "YOUR_POST_HEADLINE",
"isPartOf": {
"@type": "WebSite",
"@id": "https://YOUR_DOMAIN.com/#website"
}
},
{
"@type": "BreadcrumbList",
"@id": "https://YOUR_DOMAIN.com/blog/YOUR_POST_SLUG/#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://YOUR_DOMAIN.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://YOUR_DOMAIN.com/blog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "YOUR_POST_HEADLINE",
"item": "https://YOUR_DOMAIN.com/blog/YOUR_POST_SLUG/"
}
]
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "YOUR_BLOG_FAQ_QUESTION_1",
"acceptedAnswer": {
"@type": "Answer",
"text": "YOUR_BLOG_FAQ_ANSWER_1"
}
},
{
"@type": "Question",
"name": "YOUR_BLOG_FAQ_QUESTION_2",
"acceptedAnswer": {
"@type": "Answer",
"text": "YOUR_BLOG_FAQ_ANSWER_2"
}
}
]
}
]
}
A blog post is editorial content — thought leadership, tutorials, industry commentary. A changelog entry is a factual record of what changed in a specific release. AI treats them differently: blog posts build topical authority and expertise signals, while changelog entries signal maintenance velocity. Use BlogPosting for blog content and reserve your changelog for version-specific release notes.
AI systems weigh author credibility when deciding whether to cite content. A blog post attributed to a named Person with sameAs links to LinkedIn or Twitter carries more authority than an anonymous post. This is especially important for SaaS, where product recommendations often hinge on the expertise of the team behind the software.
It depends on the format. If a product update is written as a narrative with context, analysis, and the author's perspective, BlogPosting is appropriate. If it is a concise list of changes tied to a version number, it belongs in your changelog. Many SaaS companies publish both — a blog post announcing a major release and a changelog entry with the technical details.