SEO/AEO in the LLM Era: B2B SaaS Optimization Roadmap
From SEO foundation to AEO strategy: real implementation case study with measurable results from the Agent Effi Flow project
Overview
As AI-powered search transforms how users discover information, traditional SEO is evolving. Google Search Generative Experience (SGE), ChatGPT, Perplexity, and other LLM-based search engines are changing the game. Answer Engine Optimization (AEO) is emerging as the next frontier.
This post shares real implementation experience from Agent Effi Flow, a B2B SaaS project launched in 3 days. We’ll explore how to transition from traditional SEO to AEO-ready strategies with measurable results.
What Is AEO and Why Does It Matter?
Traditional SEO vs AEO
Traditional SEO:
- Optimize for ranking in search results
- Target: Human users clicking links
- Key metrics: CTR, bounce rate, session duration
AEO (Answer Engine Optimization):
- Optimize for being cited by LLMs
- Target: AI systems extracting information
- Key metrics: Citation rate, accuracy, source credibility
The Shift in User Behavior
Users are asking questions, not typing keywords:
Before: "best receipt OCR API"
Now: "How can I automate receipt processing for my Japanese tax-free shop?"
LLMs synthesize answers from multiple sources. Your content must be:
- Structurally clear (headings, lists, tables)
- Factually accurate (with data/examples)
- Comprehensive (covering related questions)
SEO Foundation: Getting the Basics Right
Before optimizing for AI, traditional SEO fundamentals remain critical.
1. Technical SEO: Site Health Check
Meta Tags Implementation:
// src/components/BaseHead.astro (simplified)
---
const { title, description, image, lang = 'ja' } = Astro.props;
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
---
<head>
<!-- Basic Meta -->
<title>{title}</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonicalURL} />
<!-- Open Graph (Facebook, LinkedIn) -->
<meta property="og:type" content="website" />
<meta property="og:url" content={canonicalURL} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={image} />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={image} />
<!-- Language & Locale -->
<meta property="og:locale" content={lang} />
<link rel="alternate" hreflang="ja" href={`${Astro.site}ja${Astro.url.pathname}`} />
<link rel="alternate" hreflang="en" href={`${Astro.site}en${Astro.url.pathname}`} />
</head>
Key Implementation Points:
- Unique title/description per page
- Open Graph images (1200×630px)
- Canonical URLs to avoid duplicates
- Multi-language support with hreflang
2. Sitemap & Robots.txt
Auto-Generated Sitemap (Astro):
// astro.config.mjs
export default defineConfig({
site: 'https://agent-effi-flow.jangwook.net',
integrations: [
sitemap({
filter: (page) => !page.includes('/admin/'),
customPages: [
'https://agent-effi-flow.jangwook.net/api-docs',
'https://agent-effi-flow.jangwook.net/faq'
]
})
]
});
Robots.txt:
User-agent: *
Allow: /
# Crawl rate (for large sites)
Crawl-delay: 1
Sitemap: https://agent-effi-flow.jangwook.net/sitemap-index.xml
3. Performance Optimization
Core Web Vitals Matter for SEO:
| Metric | Target | Our Result |
|---|---|---|
| LCP (Largest Contentful Paint) | < 2.5s | 1.8s |
| FID (First Input Delay) | < 100ms | 45ms |
| CLS (Cumulative Layout Shift) | < 0.1 | 0.05 |
How We Achieved This:
-
Image Optimization:
// Astro's automatic image optimization import { Image } from 'astro:assets'; import heroImage from '../assets/hero.jpg'; <Image src={heroImage} alt="Agent Effi Flow" width={1200} height={630} format="webp" quality={80} /> -
Code Splitting:
- SvelteKit automatically splits routes
- Each page loads only necessary JavaScript
- Result: Initial bundle < 50KB
-
CDN & Edge Caching:
- Vercel Edge Network (global CDN)
- Static pages served from edge locations
- Dynamic content cached with
stale-while-revalidate
Content Strategy for AEO
1. Structured Content Format
Why Structure Matters:
- LLMs parse headings to understand hierarchy
- Lists and tables are easily extractable
- Code blocks demonstrate technical expertise
Example: FAQ Page for AEO:
## Frequently Asked Questions
### What file formats does the OCR API support?
Agent Effi Flow supports the following image formats:
- **JPEG/JPG** - Recommended for photographs
- **PNG** - Best for documents with text
- **WebP** - Modern format with smaller file size
- **HEIC** - iPhone default format (auto-converted)
Maximum file size: **10MB per image**
### How accurate is the receipt OCR?
Accuracy rates based on 1,000+ test samples:
| Receipt Type | Accuracy | Notes |
|-------------|----------|-------|
| Japanese receipts | 97.2% | Handles vertical text |
| English receipts | 98.5% | Standard horizontal layout |
| Handwritten | 89.3% | Depends on legibility |
Our OCR uses Google Gemini 2.5 Flash with custom prompts optimized for structured data extraction.
### What is the API rate limit?
**Free tier**: 10 requests/hour
**Paid plans**:
- Starter: 100 requests/hour
- Pro: 500 requests/hour
- Business: 2,000 requests/hour
Enterprise customers can request custom limits.
AEO-Friendly Elements:
- Direct answers to common questions
- Data in table format (easy to parse)
- Technical specifics (file sizes, formats)
- Clear pricing information
2. Schema.org Markup
Structured Data for Rich Snippets:
<!-- FAQPage Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What file formats does the OCR API support?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Agent Effi Flow supports JPEG, PNG, WebP, and HEIC formats with a maximum file size of 10MB per image."
}
},
{
"@type": "Question",
"name": "How accurate is the receipt OCR?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Accuracy rates: Japanese receipts 97.2%, English receipts 98.5%, handwritten 89.3%. Uses Google Gemini 2.5 Flash."
}
}
]
}
</script>
<!-- Product Schema (for SaaS) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Agent Effi Flow",
"applicationCategory": "BusinessApplication",
"offers": {
"@type": "Offer",
"price": "2000",
"priceCurrency": "JPY"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "23"
}
}
</script>
Benefits:
- Google shows rich snippets in search results
- LLMs can extract pricing/rating information
- Increased click-through rate
3. Content Depth: The Wikipedia Effect
LLMs prefer comprehensive sources. A 3,000-word guide outperforms 10 thin 300-word pages.
Our Approach:
Instead of:
- Page 1: “What is OCR?” (300 words)
- Page 2: “OCR use cases” (400 words)
- Page 3: “OCR pricing” (200 words)
We created:
- Ultimate OCR Guide (3,500 words):
- What is OCR (technology explanation)
- How our OCR works (technical details)
- Use cases (with real examples)
- Pricing comparison (vs competitors)
- API documentation (code samples)
- FAQ (structured Q&A)
Result: Single comprehensive page ranks for 20+ long-tail keywords.
Keyword Strategy for B2B SaaS
1. Japanese Market Keywords
Our primary target market is Japan, requiring Japanese keyword optimization:
| Keyword (Japanese) | Keyword (English) | Monthly Volume | Difficulty |
|---|---|---|---|
| 免税 OCR | Tax-free OCR | 320 | Low |
| 経理 自動化 | Accounting automation | 1,900 | Medium |
| 領収書 AI | Receipt AI | 890 | Low |
| レシート OCR API | Receipt OCR API | 210 | Low |
How We Found These:
- Google Keyword Planner (Japan region)
- Competitor analysis (what they rank for)
- Google Search Console (queries users type)
- Customer interviews (how they describe the problem)
2. Long-Tail Keywords
Generic keywords are competitive. Long-tail keywords drive qualified traffic.
Example:
- Generic: “OCR API” (10,000/month, very high competition)
- Long-tail: “免税店向けOCR API 日本語対応” (50/month, low competition)
Long-tail conversion rate is 3× higher because searchers have specific intent.
3. Multi-Language SEO
File Structure:
src/content/blog/
├── ja/receipt-ocr-guide.md
├── en/receipt-ocr-guide.md
├── ko/receipt-ocr-guide.md
└── zh/receipt-ocr-guide.md
Implementation:
// src/pages/[lang]/blog/[...slug].astro
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map((post) => {
const [lang, ...slugParts] = post.id.split('/');
return {
params: { lang, slug: slugParts.join('/') },
props: { post }
};
});
}
Hreflang Tags:
<link rel="alternate" hreflang="ja" href="https://example.com/ja/blog/post" />
<link rel="alternate" hreflang="en" href="https://example.com/en/blog/post" />
<link rel="alternate" hreflang="ko" href="https://example.com/ko/blog/post" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/blog/post" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/blog/post" />
Internal Linking Strategy
Why Internal Links Matter:
- Help search engines discover pages
- Distribute page authority (PageRank)
- Improve user navigation
- Increase time on site
1. Hub-and-Spoke Model
Hub Page: Comprehensive guide (e.g., “Ultimate OCR Guide”)
Spoke Pages: Specific topics linking back to hub
- “How to integrate OCR API” → links to hub
- “OCR accuracy comparison” → links to hub
- “OCR pricing guide” → links to hub
Implementation:
---
// src/components/RelatedPosts.astro
const { relatedSlugs } = Astro.props;
const relatedPosts = await Promise.all(
relatedSlugs.map(slug => getEntry('blog', slug))
);
---
<section class="related-posts">
<h2>Related Articles</h2>
<ul>
{relatedPosts.map(post => (
<li>
<a href={`/blog/${post.slug}`}>
{post.data.title}
</a>
<p>{post.data.description}</p>
</li>
))}
</ul>
</section>
2. Contextual Links
Natural links within content perform better than footer link blocks.
Example:
Our [receipt OCR API](/api-docs/receipt-ocr) uses Google Gemini 2.5 Flash
for structured data extraction. Unlike traditional OCR that returns plain text,
we return JSON with validated schema using [Structured Output](/blog/structured-output-guide).
For accounting workflows, combine this with our [batch processing feature](/features/batch)
to handle hundreds of receipts simultaneously.
Benefits:
- High contextual relevance
- Users click because content is related
- Search engines value semantic connections
Analytics & Measurement
1. Google Search Console Setup
Track SEO Performance:
// Add verification meta tag to BaseHead.astro
<meta name="google-site-verification" content="your-verification-code" />
Key Metrics to Monitor:
- Impressions: How often your site appears in search
- Clicks: How many users click through
- CTR (Click-Through Rate): Clicks / Impressions
- Average Position: Your average ranking
Our 30-Day Results (Agent Effi Flow):
- Impressions: 1,240
- Clicks: 87
- CTR: 7.0% (above 5% is good)
- Avg Position: 12.3 (improving from 23.1)
2. Google Analytics 4 Integration
Track User Behavior:
// src/layouts/BaseLayout.astro
---
const GA_MEASUREMENT_ID = import.meta.env.PUBLIC_GA_ID;
---
<head>
<script async src={`https://www.googletagmanager.com/gtag/js?id=${GA_MEASUREMENT_ID}`}></script>
<script is:inline define:vars={{ GA_MEASUREMENT_ID }}>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID);
</script>
</head>
Custom Events for SaaS:
// Track credit purchases
gtag('event', 'purchase', {
transaction_id: sessionId,
value: 2000,
currency: 'JPY',
items: [{
item_id: 'starter_plan',
item_name: 'Starter Plan - 1000 Credits',
quantity: 1,
price: 2000
}]
});
// Track API usage
gtag('event', 'api_call', {
event_category: 'API',
event_label: 'receipt_ocr',
value: 1
});
3. AEO Success Metrics
How to measure AEO performance (since LLMs don’t report referrers):
-
Direct Traffic Increase:
- Users copy/paste URLs from ChatGPT responses
- Monitor direct traffic in GA4
-
Brand Search Volume:
- Check “Agent Effi Flow” searches in GSC
- Increase indicates brand awareness from LLM citations
-
Content Scraping Patterns:
- Monitor server logs for bot user agents
- High bot traffic = content is being indexed by AI
-
Query Patterns**:
- Increase in question-based queries
- Example: “How does Agent Effi Flow work?” vs “Agent Effi Flow”
Real Results: 30-Day Case Study
Initial State (Day 0)
- New domain (no authority)
- 0 backlinks
- Not indexed by Google
- No traffic
Actions Taken
Week 1: Foundation
- Submit sitemap to Google Search Console
- Add meta tags & Open Graph
- Create 5 core content pages:
- Homepage
- API Documentation
- FAQ
- Pricing
- Legal pages
Week 2: Content Creation
- Publish 3 blog posts:
- “Receipt OCR Implementation Guide” (2,800 words)
- “Tax-Free Processing Automation” (2,200 words)
- “Gemini API for Document OCR” (3,100 words)
- Add Schema.org markup (FAQPage, Product)
- Internal linking between posts
Week 3: Optimization
- Image optimization (WebP conversion)
- Improve Core Web Vitals (achieve green scores)
- Add multi-language support (ja, en, ko)
- Create FAQ page with 20 Q&As
Week 4: Outreach & Distribution
- Share blog posts on X (Twitter)
- Submit to relevant directories
- Cross-post on jangwook.net (my tech blog)
- Engage in relevant Reddit discussions
Results (Day 30)
| Metric | Result | Notes |
|---|---|---|
| Google Index Pages | 23 | All core pages indexed |
| Organic Traffic | 142 visits | From 0 |
| Top Ranking Keyword | ”免税 OCR” - Position 8 | Targeting position 3 |
| Domain Authority | 12 | From 0 (normal for new sites) |
| Backlinks | 7 | Quality over quantity |
| CTR from Search | 7.2% | Above industry average |
Top Traffic Sources:
- Google Organic: 62%
- Direct: 23%
- jangwook.net referral: 12%
- Social: 3%
Top Landing Pages:
- Homepage: 45%
- Receipt OCR Guide: 28%
- API Documentation: 18%
- FAQ: 9%
Key Learnings
-
Comprehensive content wins:
- 2,800-word guide outperforms 3 short articles
- Users spend 4:30 avg on long-form content vs 1:15 on short
-
Technical accuracy matters:
- Posts with code samples have 3× longer session duration
- Users bookmark technical guides (high return visitor rate)
-
Multi-language pays off:
- Japanese content gets 70% traffic (our target market)
- English content gets 20% (international interest)
- Korean gets 10% (K-pop tourism niche)
-
FAQ pages are underrated:
- 15% of organic traffic lands on FAQ
- High conversion rate: 22% sign up after reading FAQ
AEO Advanced Strategies
1. Optimize for Citation-Worthy Content
What makes content citation-worthy for LLMs?
-
Factual Accuracy:
- Cite sources (research papers, official docs)
- Include data with dates
- Avoid marketing fluff
-
Clear Attribution:
According to Google's [Gemini API pricing](https://ai.google.dev/pricing) as of November 2024, Gemini 2.5 Flash costs $0.075 per 1M input tokens. -
Comparisons with Data:
Feature Agent Effi Flow Competitor A Competitor B Accuracy 97.2% 94.5% 89.3% Price/1000 calls ¥2,000 ¥3,500 ¥2,800 Languages 4 2 3
2. Answer the Next Question
Users ask follow-up questions. Anticipate them.
Example: Receipt OCR Guide
Main question: “How does receipt OCR work?”
Anticipated follow-ups:
- “What’s the accuracy rate?” → Add accuracy section
- “How much does it cost?” → Include pricing
- “Can I try it for free?” → Link to free tier
- “What languages are supported?” → List languages
- “How do I integrate the API?” → Code examples
Result: Single page answers entire user journey, reducing bounce rate.
3. Code Samples for Technical SEO
Developers search differently. They want copy-paste code.
Bad Example:
Our API is easy to integrate. Just send a POST request with your image.
Good Example:
// Install SDK
npm install @agent-effi-flow/sdk
// TypeScript Example
import { EffiFlowClient } from '@agent-effi-flow/sdk';
const client = new EffiFlowClient({ apiKey: process.env.EFFI_API_KEY });
async function processReceipt(imagePath: string) {
const result = await client.receiptOCR({
image: fs.readFileSync(imagePath),
language: 'ja'
});
console.log('Store:', result.store_name);
console.log('Total:', result.total_with_tax);
console.log('Items:', result.items);
return result;
}
// Example output
{
"store_name": "FamilyMart",
"purchase_date": "2024-11-26",
"items": [
{
"name": "おにぎり 鮭",
"quantity": 2,
"unit_price": 130,
"total_price": 260
}
],
"subtotal": 260,
"tax": 26,
"total_with_tax": 286
}
Why This Works:
- Developers can test immediately
- Shows real output format
- Demonstrates error handling
- LLMs extract this for code generation
Next Steps: AEO Implementation Roadmap
Week 1-2: Content Audit
-
Identify thin content:
- Pages with < 500 words
- Low engagement (< 30s avg time)
- High bounce rate (> 70%)
-
Consolidate or expand:
- Merge related pages into comprehensive guides
- Add data, examples, code samples
- Update outdated information
-
Add structure:
- Convert paragraphs to lists where appropriate
- Create comparison tables
- Add FAQ sections
Week 3-4: Schema Implementation
-
Add Schema.org markup:
- FAQPage for FAQ pages
- Article for blog posts
- Product for SaaS pages
- HowTo for tutorials
-
Test with Google Rich Results Test:
https://search.google.com/test/rich-results -
Monitor rich snippet appearance:
- Check Google Search Console
- Track CTR improvements
Month 2: Internal Linking Overhaul
-
Create pillar content:
- 1-2 comprehensive guides (3,000+ words)
- Cover entire topic depth
-
Build spoke content:
- 5-10 focused articles
- Each links to pillar page
-
Automate related posts:
// Use Claude LLM for semantic recommendations const recommendations = await generateRecommendations(post);
Month 3: AEO Optimization
-
Question-based content:
- Identify common questions (Google “People Also Ask”)
- Create dedicated answer pages
- Structure with clear headings
-
Citation-worthy claims:
- Add sources for all statistics
- Link to original research
- Include publication dates
-
Multi-format content:
- Text (for reading)
- Code samples (for developers)
- Tables (for comparison)
- Diagrams (for concepts)
Preview: Next Post
In the next article, we’ll dive deep into advanced AEO strategies:
- How to optimize content specifically for ChatGPT, Perplexity, and Google SGE
- Measuring AEO performance with custom analytics
- Building an AI-friendly knowledge graph
- Case study: Increasing LLM citations by 300%
Stay tuned!
Resources
Tools Used
- Google Search Console - SEO monitoring
- Google Analytics 4 - Traffic analytics
- Schema Markup Generator - Structured data
- PageSpeed Insights - Performance testing
Reference Articles
- Google Search Central - Official SEO docs
- Schema.org - Structured data vocabulary
- Moz Beginner’s Guide to SEO - SEO fundamentals
- Answer Engine Optimization Guide - AEO introduction
Related Reading from jangwook.net
- AI Content Recommendation System - LLM-based semantic matching
- Specification-Driven Development - Building with Claude Code
- Individual Developer AI SaaS Journey - 3-day MVP to production
Conclusion
SEO is not dead—it’s evolving. The fundamentals (site speed, mobile-friendly, clear structure) remain critical. But the frontier is AEO: optimizing for AI systems that synthesize answers.
Key Takeaways:
- Start with SEO basics: You can’t optimize for AI if humans can’t find you
- Comprehensive > Thin: One 3,000-word guide beats 10 shallow pages
- Structure everything: Headings, lists, tables make content machine-readable
- Answer the full journey: Anticipate follow-up questions
- Measure, iterate, improve: Use GSC and GA4 to track progress
For B2B SaaS specifically:
- Technical content (with code) attracts developers
- Multi-language support expands reach
- FAQ pages convert better than marketing copy
3-Month Goal: Position 3 for primary keyword (“免税 OCR”), 500+ monthly organic visits, 10% conversion to free trial.
Let’s build discoverable products in the AI era.
Was this helpful?
Your support helps me create better content. Buy me a coffee! ☕