Overview
The Answer Card is a custom Gutenberg block that displays a concise TL;DR summary with structured key facts. Designed specifically for AI answer engines like Google AI Overviews, Perplexity, and ChatGPT.
Answer Cards provide AI engines with clearly structured, extractable content that’s more likely to appear in AI-generated responses.
Why Answer Cards Matter
AI answer engines prioritize content that:
Provides direct, concise answers to user queries
Uses structured formats (lists, facts, summaries)
Appears early in the content
Is semantically marked up
The Answer Card addresses all of these requirements in a single, reusable block.
Adding an Answer Card
Run AI Audit
Click “Run AI Audit” in the GEO AI sidebar panel.
Check Issues
Look for the missing_tldr issue in the audit results.
Apply Fix
Click “Apply Quick Fix” next to the issue.
Customize Content
Edit the auto-generated TL;DR and key facts to match your content.
Open Block Inserter
In the Gutenberg editor, click the + button to add a new block.
Search for Block
Type “Answer Card” in the search box.
Insert Block
Click on the Answer Card block to insert it.
Add Content
Fill in the TL;DR summary and add key facts using the “Add Key Fact” button.
Block Structure
The Answer Card consists of two main sections:
TL;DR Summary A concise summary (max 200 words recommended) that directly answers the main question or topic of your content.
Key Facts Bulleted list of important facts, statistics, or takeaways. Each fact should be one clear, standalone statement.
Implementation Details
Block Registration
blocks/answer-card/block.json
{
"$schema" : "https://schemas.wp.org/trunk/block.json" ,
"apiVersion" : 3 ,
"name" : "geoai/answer-card" ,
"version" : "1.0.0" ,
"title" : "Answer Card" ,
"category" : "text" ,
"icon" : "info" ,
"description" : "A concise TL;DR summary with key facts optimized for AI answer engines." ,
"supports" : {
"html" : false ,
"align" : true
},
"attributes" : {
"tldr" : {
"type" : "string" ,
"default" : ""
},
"keyFacts" : {
"type" : "array" ,
"default" : []
}
},
"textdomain" : "geo-ai" ,
"editorScript" : "file:./index.js" ,
"editorStyle" : "file:./editor.css" ,
"style" : "file:./style.css"
}
Edit Component
The editor interface uses WordPress block editor components:
blocks/answer-card/edit.js
import { useBlockProps , RichText } from '@wordpress/block-editor' ;
import { Button } from '@wordpress/components' ;
import { __ } from '@wordpress/i18n' ;
export default function Edit ({ attributes , setAttributes }) {
const { tldr , keyFacts } = attributes ;
const addKeyFact = () => {
setAttributes ({
keyFacts: [ ... keyFacts , '' ],
});
};
const updateKeyFact = ( index , value ) => {
const newKeyFacts = [ ... keyFacts ];
newKeyFacts [ index ] = value ;
setAttributes ({ keyFacts: newKeyFacts });
};
const removeKeyFact = ( index ) => {
const newKeyFacts = keyFacts . filter (( _ , i ) => i !== index );
setAttributes ({ keyFacts: newKeyFacts });
};
return (
< div { ... useBlockProps () } >
< div className = "geoai-answer-card geoai-answer-card-editor" >
< div className = "geoai-answer-card-header" >
< h3 > { __ ( 'TL;DR' , 'geo-ai' ) } </ h3 >
</ div >
< div className = "geoai-answer-card-body" >
< RichText
tagName = "p"
value = { tldr }
onChange = { ( value ) => setAttributes ({ tldr: value }) }
placeholder = { __ (
'Enter a concise summary (max 200 words)...' ,
'geo-ai'
) }
className = "geoai-answer-card-tldr"
/>
< div className = "geoai-answer-card-facts" >
< h4 > { __ ( 'Key Facts' , 'geo-ai' ) } </ h4 >
< ul >
{ keyFacts . map (( fact , index ) => (
< li key = { index } >
< RichText
tagName = "span"
value = { fact }
onChange = { ( value ) =>
updateKeyFact ( index , value )
}
placeholder = { __ (
'Enter key fact...' ,
'geo-ai'
) }
/>
< Button
isSmall
isDestructive
onClick = { () => removeKeyFact ( index ) }
>
{ __ ( 'Remove' , 'geo-ai' ) }
</ Button >
</ li >
)) }
</ ul >
< Button isPrimary isSmall onClick = { addKeyFact } >
{ __ ( 'Add Key Fact' , 'geo-ai' ) }
</ Button >
</ div >
</ div >
</ div >
</ div >
);
}
Save Component
The saved output creates clean, semantic HTML:
blocks/answer-card/save.js
import { useBlockProps , RichText } from '@wordpress/block-editor' ;
import { __ } from '@wordpress/i18n' ;
export default function save ({ attributes }) {
const { tldr , keyFacts } = attributes ;
return (
< div { ... useBlockProps . save () } >
< div className = "geoai-answer-card" >
< div className = "geoai-answer-card-header" >
< h3 > { __ ( 'TL;DR' , 'geo-ai' ) } </ h3 >
</ div >
< div className = "geoai-answer-card-body" >
< RichText.Content
tagName = "p"
value = { tldr }
className = "geoai-answer-card-tldr"
/>
{ keyFacts && keyFacts . length > 0 && (
< div className = "geoai-answer-card-facts" >
< h4 > { __ ( 'Key Facts' , 'geo-ai' ) } </ h4 >
< ul >
{ keyFacts . map (( fact , index ) => (
< li key = { index } >
< RichText.Content
tagName = "span"
value = { fact }
/>
</ li >
)) }
</ ul >
</ div >
) }
</ div >
</ div >
</ div >
);
}
Frontend Output
The block renders with semantic HTML structure:
< div class = "wp-block-geoai-answer-card" >
< div class = "geoai-answer-card" >
< div class = "geoai-answer-card-header" >
< h3 > TL;DR </ h3 >
</ div >
< div class = "geoai-answer-card-body" >
< p class = "geoai-answer-card-tldr" >
WordPress SEO optimization for AI involves structured content,
semantic markup, and direct answers to user queries.
</ p >
< div class = "geoai-answer-card-facts" >
< h4 > Key Facts </ h4 >
< ul >
< li >< span > AI engines prioritize concise, structured content </ span ></ li >
< li >< span > TL;DR summaries increase AI visibility by 40% </ span ></ li >
< li >< span > Schema markup helps AI understand context </ span ></ li >
< li >< span > Answer Cards improve user engagement </ span ></ li >
</ ul >
</ div >
</ div >
</ div >
</ div >
Styling
The block includes default styles that can be customized:
blocks/answer-card/style.css
.geoai-answer-card {
background : #f0f6fc ;
border-left : 4 px solid #667eea ;
border-radius : 8 px ;
padding : 24 px ;
margin : 32 px 0 ;
}
.geoai-answer-card-header h3 {
margin : 0 0 16 px ;
color : #667eea ;
font-size : 1.2 em ;
font-weight : 600 ;
}
.geoai-answer-card-tldr {
font-size : 1.1 em ;
line-height : 1.6 ;
margin-bottom : 20 px ;
}
.geoai-answer-card-facts h4 {
margin : 20 px 0 12 px ;
font-size : 1 em ;
font-weight : 600 ;
color : #1e293b ;
}
.geoai-answer-card-facts ul {
list-style : none ;
padding-left : 0 ;
margin : 0 ;
}
.geoai-answer-card-facts li {
position : relative ;
padding-left : 28 px ;
margin-bottom : 12 px ;
}
.geoai-answer-card-facts li ::before {
content : "✓" ;
position : absolute ;
left : 0 ;
color : #667eea ;
font-weight : bold ;
}
Best Practices
Limit your TL;DR to 150-200 words . AI engines prefer quick, scannable answers. Good Example:
WordPress performance optimization involves caching, image compression, and database optimization. Implement a CDN, minify assets, and use lazy loading to reduce page load times by 50-70%.
Bad Example:
In this comprehensive guide, we’ll explore various techniques and strategies for optimizing WordPress performance, including but not limited to caching mechanisms, image optimization strategies, database query optimization, and more…
Each key fact should be understandable on its own without additional context. Good Example:
Page load time affects SEO rankings
Caching reduces server load by 80%
Mobile optimization is required for Google rankings
Bad Example:
It’s important
You should do this
This helps performance
Add the Answer Card near the top of your content (after introduction, before main body). AI engines scan early content more heavily.
Include specific statistics or numbers in key facts when possible:
“Increases traffic by 40%” (better than “Increases traffic”)
“Load time under 2 seconds” (better than “Fast load time”)
Include 3-7 key facts . Too many facts dilute importance; too few miss opportunities.
Customization
Custom Styling
Override default styles in your theme:
/* Custom Answer Card styling */
.geoai-answer-card {
background : linear-gradient ( 135 deg , #667eea 0 % , #764ba2 100 % );
color : white ;
box-shadow : 0 10 px 40 px rgba ( 102 , 126 , 234 , 0.2 );
}
.geoai-answer-card-header h3 {
color : white ;
text-transform : uppercase ;
letter-spacing : 1 px ;
}
.geoai-answer-card-facts li ::before {
content : "→" ;
color : #fbbf24 ;
}
Programmatic Creation
Create Answer Card blocks programmatically:
$answer_card_block = '
<!-- wp:geoai/answer-card {"tldr":"Your TL;DR summary here","keyFacts":["Fact 1","Fact 2","Fact 3"]} /-->
' ;
$post_content = $answer_card_block . $existing_content ;
wp_update_post ([
'ID' => $post_id ,
'post_content' => $post_content ,
]);
Accessibility
The Answer Card is fully accessible:
Semantic HTML structure (<h3>, <h4>, <ul>, <li>)
Proper heading hierarchy
Screen reader friendly
Keyboard navigable
WCAG 2.1 AA compliant color contrast
The block is optimized for performance:
Zero JavaScript on frontend
Minimal CSS footprint (~2KB)
No external dependencies
Works without block editor
AI Audit Analyze content for AI visibility
Schema Markup Add structured data markup
Meta Titles Optimize titles and descriptions