Let me start with the uncomfortable truth. I spent months writing 54 articles about AI tools, trading bots, and automation for hubaiasia.com. I built APIs. I documented everything. My SEO was technically fine — titles were optimized, posts had keywords, I used Yoast.
Google sent me almost nothing.
Zero impressions on most posts. A trickle of direct traffic. And when I asked ChatGPT about "screenshot API for developers" or asked Perplexity about "Thai utility APIs," my site wasn't mentioned once.
That's when I stopped optimizing for Google and started optimizing for GEO — Generative Engine Optimization: the practice of making your content citable by AI answer engines.
This is the case study. Exact changes, no fluff.
Why GEO Matters Right Now
Search is fracturing. A growing share of informational queries never reach a Google results page — they're answered directly by ChatGPT, Claude, Perplexity, or Gemini. For developer tools and technical topics, the shift is faster than most SEO guides acknowledge.
For a small site like mine — English + Thai content, niche APIs, developer-focused — GEO is the only realistic path to discoverability. I can't outspend enterprise SEO budgets. But I can be the most citable source on specific topics.
Here's what I changed.
The 7 GEO Changes (With Specifics)
1. Created /llms.txt and /llms-full.txt
The llms.txt spec — proposed by Answer.AI — is a robots.txt for language models. A structured, Markdown-formatted index at your domain root, designed for LLM crawlers to parse efficiently.
I created two files:
-
/llms.txt— concise index of key pages (under 2,000 words) -
/llms-full.txt— verbose version with full API documentation context
Sample snippet:
# HubAI Asia
> HubAI Asia (hubaiasia.com) is a developer-focused platform by Tawan Shamsanor
> offering AI-powered APIs, trading bot documentation, and technical content in
> English and Thai.
## APIs
- [Screenshot API](/screenshot-api/): Capture full-page or element screenshots via REST.
Returns PNG/JPEG. Supports auth headers and mobile viewport emulation.
- [SEO Meta API](/seo-meta-api/): Extract Open Graph, meta description, canonical URL,
and structured data from any public URL in one GET request.
- [Thai Utility API](/thai-api/): Thai national ID validation, province codes, bank codes.
Why it works: LLMs get a structured summary of your site instead of parsing your HTML nav. It's the difference between handing someone a map vs. dropping them in a city and saying "explore."
2. Structured Data: Article + FAQPage + Organization JSON-LD
Schema.org markup provides unambiguous machine-readable assertions about who you are, what you published, and when. I added three schema types to every post:
-
Article— withauthor,datePublished,dateModified,headline,publisher -
FAQPage— 2–4 direct-answer questions per post -
Organization— site-level withfounderandsameAslinks
In my observation, posts with FAQPage schema get surfaced in Perplexity's related questions at a noticeably higher rate. And FAQPage schema forces you to write answer-first — which is exactly what AI engines prefer to cite.
Full JSON-LD template is in the canonical article on hubaiasia.com — ready to paste into WordPress.
3. Content Chunking: Answer-First Structure
AI engines extract by chunk, not by article. If your answer is buried inside a 400-word paragraph, the engine skips it.
My rewrite rule: answer the implied question in the first sentence of every section.
Before:
"When thinking about how to optimize content for AI, there are many considerations..."
After:
"AI answer engines extract content by chunk, not by article. Write each H2 so its first sentence directly answers the implied question."
Max paragraph length: 4 sentences. H2 headings as topics, not teasers. H3 subheadings as scoped answers.
4. Entity Consistency: Named Entities Throughout
If your site calls you "the author," "our team," "Tawan," and "me" in different posts, LLMs never build a strong entity association — so they never confidently cite you.
I standardized:
- Site: HubAI Asia everywhere
- Author: Tawan Shamsanor — full name in every byline and JSON-LD
- Products: exact names — Screenshot API, SEO Meta API, Thai Utility API
When a user asks Claude "who built the Thai Utility API?", the model needs an unambiguous mapping. Inconsistent naming creates ambiguity. Ambiguous entities don't get cited.
5. Citation-Worthy Claims: Numbers and Direct Statements
Vague advice doesn't get quoted. Specific, quotable claims do.
My rules:
- Use numbers. "54 blog posts, 0 traffic" is citable. "I wrote a lot and got little" is not.
- Name tools explicitly. "ChatGPT, Claude, and Perplexity" > "AI tools."
- Show the receipts. Screenshots, dates, exact API endpoint names, real rate limits.
My Screenshot API docs now show: exact rate limits (100 req/month free), a sample curl command, and a real output image. Before, it had marketing copy. Marketing copy is cited by no one.
6. Fresh Dates in URLs and Content
AI engines have a recency bias. When two sources have similar authority, the more recent one wins.
Changes:
-
datePublished+dateModifiedin all JSON-LD blocks, updated on every revision - Visible "Last updated: [date]" at the top of pillar pages
- Year in key anchor texts: "2026 GEO guide" not just "GEO guide"
- Version numbers in API docs: "Screenshot API v2 (updated March 2026)"
7. Author Bio and E-E-A-T Signals
If an LLM has no signal you have real experience with the topic, it won't quote you.
I built a proper /about/ page with:
- Specific experience: "Running BTC/ETH futures bots in production since 2023"
- Real products: "Built and maintain 4 public APIs used by developers in Thailand and internationally"
- Links to GitHub (code), dev.to (writing), LinkedIn
Every post now has an author box with 2-sentence bio + link to /about/.
For technical posts, I added a "Why trust this" line: "This guide is written by the developer who built this API. The rate limits described here come directly from the production implementation."
30-Day Projection
| Metric | Baseline (April 2026) | 30-Day Target |
|---|---|---|
| Google clicks | ~5/week | 30+/week |
| Perplexity citations (manual) | 0 | 3+ |
| ChatGPT citations (manual) | 0 | 1–2 |
| API trial signups | ~2/month | 10+/month |
I'll publish a full retro in May 2026 with real numbers. No vanity metrics.
The GEO Checklist (Copy This)
- [ ]
llms.txtat domain root with this post's URL listed - [ ] Article JSON-LD:
author.name,datePublished,dateModified - [ ] FAQPage JSON-LD with 2–4 direct-answer questions
- [ ] Every H2 section answers its implied question in the first sentence
- [ ] Max paragraph length: 4 sentences
- [ ] Named entities used consistently throughout
- [ ] At least one specific number per section
- [ ] Visible "Last updated" date on pillar pages
- [ ] Author box with 2-sentence bio on every post
- [ ] Internal links use exact product/article names (not "click here")
What's Next
The 54 posts are being retrofitted in batches — starting with highest-intent pages: the Screenshot API docs, SEO Meta API guide, and the trading bot content on /trading-real/.
Full article + JSON-LD template: hubaiasia.com/geo-case-study/
Subscribe for the May retro: Sign up on hubaiasia.com
Follow me: I cross-post all technical articles here on dev.to. Hit follow if you want the data when it comes in.
Tawan Shamsanor — Thai developer, building APIs and trading bots at hubaiasia.com
Top comments (0)