Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read
Foundational models already contain the public internet up to their training cut-off. Re-stating facts the model already knows adds zero retrieval value. The engine has no reason to cite a page that tells it what it already believes.

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read
Most GEO / AEO playbooks are written for global markets. The buyer prompts, citation sources, and authority vectors assume US / UK / EU media ecosystems. They break in Hong Kong.

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
10 min read
A practitioner's view of the three platforms a B2B SaaS in Asia is most likely to evaluate. Comparison framework: instrumentation depth, engine coverage, regional authority vectors, schema-level control, agent-analytics capability. Recommendation: the platform that wins for Asia is the one that gives you parser-level control + multi-engine monitoring + regional authority-vector coverage. Most do not offer all three.
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
7 min read
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
7 min read
We operate from Hong Kong.
current Time zone (GMT+8)
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read
Foundational models already contain the public internet up to their training cut-off. Re-stating facts the model already knows adds zero retrieval value. The engine has no reason to cite a page that tells it what it already believes.

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read
Most GEO / AEO playbooks are written for global markets. The buyer prompts, citation sources, and authority vectors assume US / UK / EU media ecosystems. They break in Hong Kong.

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
10 min read
A practitioner's view of the three platforms a B2B SaaS in Asia is most likely to evaluate. Comparison framework: instrumentation depth, engine coverage, regional authority vectors, schema-level control, agent-analytics capability. Recommendation: the platform that wins for Asia is the one that gives you parser-level control + multi-engine monitoring + regional authority-vector coverage. Most do not offer all three.
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
7 min read
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
7 min read


We operate from Hong Kong.
Timezone (GMT+8)
Office Location
Unit 2904- 05, 29/F, Universal Trade Centre, 3 Arbuthnot Road, Central, Hong Kong
BR No. 80409056

Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read
Foundational models already contain the public internet up to their training cut-off. Re-stating facts the model already knows adds zero retrieval value. The engine has no reason to cite a page that tells it what it already believes.

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read
Most GEO / AEO playbooks are written for global markets. The buyer prompts, citation sources, and authority vectors assume US / UK / EU media ecosystems. They break in Hong Kong.

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
10 min read
A practitioner's view of the three platforms a B2B SaaS in Asia is most likely to evaluate. Comparison framework: instrumentation depth, engine coverage, regional authority vectors, schema-level control, agent-analytics capability. Recommendation: the platform that wins for Asia is the one that gives you parser-level control + multi-engine monitoring + regional authority-vector coverage. Most do not offer all three.
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
7 min read
Why your blog isn't being cited by ChatGPT
The five most common reasons, and the specific fix for each

The five most common reasons: (1) JSON-LD schema missing, (2) Cloudflare blocking the bot, (3) heading hierarchy broken, (4) content has no information gain, (5) H1 doesn't match the buyer's prompt. Each with the specific fix.
A page can rank on Google and still be invisible to ChatGPT
Ranking and citation are two different pipelines. Google ranks pages. ChatGPT and Perplexity retrieve passages: short extracts their parsers can lift, trust and stitch into an answer. So a page can sit at position three for a keyword and never be retrieved at all. Retrieval depends on three things most marketing teams never check: whether the bot is allowed in, whether the page parses cleanly, and whether the passage says anything the model doesn't already believe.
We audit B2B SaaS sites across Asia every week. When a founder tells us their blog isn't being cited, it is almost always one of five reasons. Here they are, in the order we check them, with the fix for each.
Reason 1: your schema is missing, or it lies
Quick test: run your five most important pages through validator.schema.org. If nothing comes back, the parser is guessing what your page is, and it guesses wrong surprisingly often.
JSON-LD is how you tell the machine, in machine language, what the page contains. This is an Article, written by this Person, published by this Organisation, answering these questions. Without it, the parser falls back on layout heuristics. Your beautifully designed page is, to a retrieval system, an undifferentiated block of text.
The fix: add JSON-LD to every insight page: Article, FAQPage where you have Q&A blocks, Organization and Person with sameAs links pointing at your LinkedIn and company profiles. In Framer this goes in the page's custom head code. Twenty minutes per template, not per page.
Reason 2: Cloudflare is blocking the bot that would cite you
This is the one nobody believes until we show them the logs.
On 15 September 2026, Cloudflare's new defaults applied. For new domains, new sites and existing free plans, "Training" and "Agent" crawlers are now blocked automatically on pages carrying ads. Plenty of companies also flipped the one-click "Block AI bots" toggle back in July 2025 and never looked at it again.
Either way, the result is the same. OAI-SearchBot, ChatGPT-User or PerplexityBot get a 403 at the edge, before your robots.txt is even read, because the firewall rules fire first.
Your SEO looks fine. Google still indexes you. But the retrieval bots that decide citations never see a word. Marketing teams usually find out about this from us, months later, when we pull the crawler logs during an audit.
The fix: Cloudflare dashboard, then Security, Bots, AI Crawl Control. Allow the search and user-triggered bots: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User. Then decide deliberately about the training crawlers (GPTBot, ClaudeBot, Google-Extended) instead of inheriting a default someone set during a security review. One caution. Googlebot crawls for both search and training, so blocking the whole "Training" category can take Googlebot down with it. Check how Cloudflare treats multi-purpose crawlers before you save.
Reason 3: your heading hierarchy is broken
Retrieval systems extract in chunks, and your H1–H2–H3 structure is the map they chunk by. We see two failure modes on Framer builds especially. Text styled to look like a heading but published as a paragraph tag. And pages where every second line is an H2 because that is how the component happened to be built.
The fix: one H1 per page, phrased the way a buyer would prompt it. H2s as the sub-questions a buyer asks next. H3s nested under their H2, never skipping levels. Then look at the page in outline view. If the outline doesn't make sense as a table of contents, it won't make sense to a parser either.
Reason 4: the content has no information gain
Sometimes the plumbing is fine and the content is the problem. If your post re-explains "what is payroll software" in five hundred words, the model already knows everything on the page. It has read a thousand versions of it. There is no reason to cite yours.
We have written the long version of this argument The information-gain problem. The short version: the unit of citation value is signal the model cannot paraphrase from training data. Your own numbers. Your named case material. Your methodology. First-party or nothing.
The fix: for each buyer prompt you want to win, ask what you know that the model cannot source anywhere else. Anonymised benchmark data. A named outcome. A labelled framework. Build that into the page.
Reason 5: your H1 answers a question nobody asks
Buyers don't prompt keywords. They prompt situations. "Best payroll software for an SME with MPF and cross-border staff", not "payroll solutions Hong Kong". If your H1 says "Solutions" or "Insights", you have opted out of the prompt before the race starts.
The fix: collect twenty real buyer prompts. Sales calls, WhatsApp threads, discovery notes, in the exact phrasing people use. Rewrite your H1 and H2s to mirror them. Then put an atomic-content block (a self-contained 40–60 word answer) in the first paragraph under each question heading. That first paragraph is the passage the engine extracts. Make it liftable.
How to test all five in one afternoon
Run your twenty buyer prompts in ChatGPT and Perplexity. Log who gets cited.
Fetch your robots.txt from the command line. Look for GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot.
Open Cloudflare's AI Crawl Control and check the crawler tab for blocked requests.
Run your key pages through validator.schema.org.
View source and check the actual heading tags, not the styling: the tags.
Check GA4 for referral traffic from chatgpt.com and perplexity.ai. Zero is a finding, not a baseline.
The bottom line
Citation is a pipeline: access, then parse, then worthiness. Fix it in that order. Most sites we audit across Asia never get past step one. And step one costs nothing but an afternoon. The HK Citation Map The information-gain problem
Common Questions
How long does it take to get cited after fixing these?
Will blocking AI training bots hurt my Google rankings?
Do I need an llms.txt file?
Why does Perplexity cite us but ChatGPT doesn't?
Does FAQ schema get me into AI Overviews?
How do I find out where my brand stands?
More articles

The information-gain problem
What AI actually looks for before it cites you
7 min read

The HK Citation Map
The proprietary index Parsability maintains to engineer HK-specific citation
7 min read

Profound vs. Goodie AI vs. Kalicube
Which GEO platform actually works for B2B SaaS in Asia
7 min read


We operate from Hong Kong.
Timezone (GMT+8)
Office Location
Unit 2904- 05, 29/F, Universal Trade Centre, 3 Arbuthnot Road, Central, Hong Kong
BR No. 80409056

