GEO Cite 22

Why ChatGPT doesn't cite your site: 5 technical causes you can check in 10 minutes

Almost all GEO advice is about how to write. But across dozens of sites we analysed, the reasons an AI assistant doesn't cite a page are nearly always five others, and they're all technical: the engine doesn't know you published, you're blocking the very crawler that would cite you while believing you're protecting yourself, your author is a different person on every article, your figures have no source, and your content has nothing worth lifting.

GEO Cite 22 Admin · · 11 min read
Why ChatGPT doesn't cite your site: 5 technical causes you can check in 10 minutes

Why ChatGPT doesn't cite your site: 5 technical causes you can check in 10 minutes

Try it right now. Open ChatGPT and ask something your site explains better than anyone else in your field. Read the answer. Three names come back, and none of them is yours — even though you have written more, and better, on the subject than all three.

The instinctive reaction is to blame the content: maybe it needs a rewrite, maybe more depth, maybe a different tone. In most of the cases where we actually looked under the hood, the content was not the problem. The causes were technical, invisible from reading the page, and almost always the same five. Every one of them can be checked today, without touching a line of your text.

Quick Answer

An AI assistant fails to cite your site for five recurring technical reasons: it does not know you published (nobody notified it, and a spontaneous crawl arrives days later); your robots.txt is blocking the very crawler that would have cited you, because you meant to opt out of training; your author has no stable identifier, so to a machine every article carries a different person's byline; your figures have no declared source, and a model only cites what it can defend; and your content has no liftable parts — no definitions, tables, lists or steps that stand on their own inside someone else's answer. Each check takes about two minutes.

Disclosure

This article is published by the team behind Innova GEO AI Indexer, a WordPress plugin for Generative Engine Optimization. We name our own tool once, at the end, clearly flagged as ours. Every check described here can be done by hand and for free with public tools: if you run them and then fix things manually, this article has still done its job.


How we arrived at these five

Not from a survey. From audits on real production sites, carried out while building a plugin that touches exactly these points: robots.txt, JSON-LD run through the official validators, crawler logs, llms.txt files read line by line.

Two concrete examples of what turns up, both from real cases a few weeks old. On an association website with hundreds of pages, the llms.txt file weighed 606 bytes and contained not a single link: a description of the organisation, and nothing else. Technically valid, practically useless — a model reads who you are and never finds where you are. On another site, the schema.org validator was rejecting the entities on every page because they were tagged with a type that does not exist in schema.org: no visible error on the site, no warning in WordPress, just structured data silently discarded.

Neither problem was diagnosable by reading the site. That is why the five checks are worth more than writing yet another article.


1. Nobody told the engine

You publish an article. From that moment, and until a crawler comes round to read it, that article does not exist for the rest of the world. The spontaneous visit arrives when it arrives: on a site with modest authority that can be days, sometimes weeks. If your content is tied to something topical, the moment that mattered has already passed.

There is an alternative to waiting, years old and still rarely used outside technical SEO: IndexNow, a protocol that lets a site tell search engines "I published this URL, come and look". The site publishes a verification file containing a key, and pushes a notification on every publish. No cost, no account.

The check (2 minutes)

Take your most recently published page and search Bing for site:yoursite.com/path-to-the-page. If it is still missing days after publication, this is not a quality problem: nobody told anyone.

The limit, stated plainly

IndexNow is coordinated by Microsoft and adopted by Bing, Yandex, Naver and Seznam. Google does not use it. Anyone telling you IndexNow gets you into AI Overviews is selling you something. It matters because the Bing index feeds part of the retrieval layer of several assistants — not because it fixes Google.


2. You blocked the crawler that would have cited you

This is the cause we see most often, and the only self-inflicted one.

Through 2023 and 2024 a lot of articles explained how to stop AI companies training on your content. All of them handed out a robots.txt block to copy. A great many sites pasted it without looking inside. The trouble is that those blocks lump together bots that do completely different jobs.

AI bots do not all do the same thing
User agentWhat it doesWhat blocking it costs you
GPTBotTraining OpenAI modelsOnly presence in training data. It does not remove you from ChatGPT search.
OAI-SearchBotThe ChatGPT search indexCitations inside ChatGPT answers. This is the one you do not want to block.
ChatGPT-UserOpening a page at a user's explicit requestThe chance to be read while someone is asking about you.
ClaudeBotAnthropic's main crawlerCitations in Claude.
PerplexityBotThe Perplexity indexCitations in the engine that, of all of them, credits sources most generously.
Google-ExtendedUse in Gemini and AI OverviewsThat, and only that. It does not affect your ranking in Google Search, whatever you may have read.
CCBotCommon Crawl, a public datasetDownstream effects on the many models that start from it.

Blocking training is a legitimate choice: if you live off paywalled content, it makes sense. Blocking retrieval bots is something else entirely — it means asking not to be cited, and then complaining about not being cited.

The check (1 minute)

Open yoursite.com/robots.txt and read it. Look for Disallow: / under any of the names in the table. If you find one covering OAI-SearchBot, PerplexityBot or ClaudeBot, you have just found the number one reason nobody cites you — and you can remove it today.


3. To a machine, your 50 articles have 50 different authors

Your page almost certainly carries an author in its structured data. The name is right. The problem is that, without a stable identifier, that name is just a string: "Mario Rossi" in the January article and "Mario Rossi" in the March one are, to a system reading the data, two people who happen to share a name.

Authority only accumulates if something can add it up. Fifty articles under one byline are worth something when a system understands it is the same byline every time. The technical fix exists and is simple: every entity in the JSON-LD gets a stable identifier — an @id — and every page points at the same one. From there the author becomes a single entity of the site rather than a repeated name.

The same applies to the organisation, to the site as a work, and to the page itself. When those identifiers are missing or shift, the graph of your structured data is a set of islands: correct information that never connects.

The check (3 minutes)

Copy the contents of the <script type="application/ld+json"> tag from one of your articles (Ctrl+U shows the source) and paste it into validator.schema.org. Look at the author node: if it has no @id, or the @id contains a fragment that changes from page to page, you have found cause three. While you are there, check whether the validator flags unrecognised types: it happens more often than you would think, and that data is discarded in silence.


4. You say "a lot", not "58%"

Take an AI answer you read recently and look at which sentences carry a source next to them. They are almost always verifiable ones: a number, a date, a percentage, an amount. They are almost never qualitative claims.

The reason is simple: a model producing an answer is taking a risk, and it cites what it can defend. "The market is growing a lot" is indefensible. "The market grew 34% in 2025 according to observatory X" is — and it carries the name of the source with it, which is often precisely why you get named.

This is the highest-return item of the five: it needs no technical change, only the habit of anchoring your claims. A figure with its source declared in the structured data is worth several times the same figure left bare in the text.

The check (2 minutes)

Open your latest article and count the numbers followed by a unit or a symbol: percentages, currency, days, milliseconds. "Chapter 3" does not count, "3 seconds" does. Fewer than three across the whole piece means you are giving nobody anything to quote.


5. Your content has no liftable parts

An assistant does not cite articles: it cites portions. It needs a fragment that holds up on its own, away from your page, inside an answer written for somebody else. Call it a liftable unit.

A wall of twelve beautiful paragraphs, each depending on the one before it, contains no liftable unit at all. A crisp definition, a comparison table, a numbered set of steps, a statistic with its source: those are liftable units. It is not about length, it is about self-sufficiency.

Three signals can be counted mechanically and tell you most of what you need: whether there is at least one list or table, the average paragraph length (past 80 words it becomes a block nobody detaches), and the presence of named entities — products, companies, places, regulations — that anchor the text to things the model already recognises.

The check (2 minutes)

Look at your most important article and ask: if I had to copy one portion of it into an answer for a stranger, which would I pick? If the question has no obvious answer, this is your problem.


The 15 minutes you need

The five checks in order, on the content you care about most:

  1. Two minutes — search Bing for your most recent page with site:. Not there? Nobody told the engine.

  2. One minute — open /robots.txt and look for the names in the table above. Found OAI-SearchBot or PerplexityBot under a Disallow: /? Remove it.

  3. Three minutes — paste your JSON-LD into validator.schema.org. Does the author have a stable @id? Any unrecognised types?

  4. Two minutes — count the numbers with units in the article. Fewer than three?

  5. Two minutes — find the liftable unit. Is there a definition, a table, a procedure? Or is it one solid block?

That leaves five minutes to write down what you found. In our experience, people running this round find two problems out of five on average, and number 2 is the one that turns up most often.


What we automated

We built these five checks into a WordPress plugin because running them by hand on every piece of content is not realistic. It is Innova GEO AI Indexer, it is free on the official WordPress directory, it needs no account or subscription, and the latest version does exactly the five things in this article:

  • notifies IndexNow endpoints automatically when you publish — off by default, switched on when you decide;

  • lists the AI crawlers inside WordPress with what blocking each one costs you written next to it, and leaves them all allowed until you say otherwise;

  • gives stable identifiers to author, organisation, site and page, and links them together;

  • offers a Statistic block that carries its source into the structured data;

  • scores citability from 0 to 100 as you write, with the formula in plain sight — the analysis is local, your text never leaves the browser.

If you would rather do all of it by hand, the five checks above work just as well. That is why we wrote them out in full before naming the product.


FAQ

Does blocking GPTBot remove me from ChatGPT?

No. GPTBot is about model training. Citations inside ChatGPT answers depend on OAI-SearchBot and ChatGPT-User, which are different user agents. You can block the first and allow the others: that is a coherent position for anyone who does not want to be in the training data but does want to stay quotable.

Does IndexNow work with Google?

No, Google does not participate in IndexNow. It covers Bing, Yandex, Naver and Seznam. It matters because the Bing index feeds part of the retrieval layer of some assistants, not because it speeds up indexing on Google.

Do I need to rebuild the site to fix these?

No, and it would be the worst possible use of that budget. Four causes out of five are fixed without touching the layout: one line of robots.txt, correct structured data, the habit of citing sources, and some structure in the text. The fifth — liftable structure — is editorial work, not development work.

How long before an assistant notices the changes?

It depends on the engine and how often it visits you. With a push notification the crawl can happen the same day; updating what the model "knows" is a different matter and takes longer. Expect weeks rather than hours, and measure over periods rather than single questions: the same question asked twice can produce different answers.

Frequently asked questions

Does blocking GPTBot remove my site from ChatGPT answers? +

No. GPTBot controls training data access, not citations. ChatGPT answers rely on OAI-SearchBot and ChatGPT-User, which are separate crawlers. You can block GPTBot to opt out of training while keeping OAI-SearchBot allowed so your site remains quotable in ChatGPT responses.

Does IndexNow help my site get cited by Google AI Overviews? +

No. Google does not participate in IndexNow. The protocol covers Bing, Yandex, Naver, and Seznam. It matters because the Bing index feeds the retrieval layer of several AI assistants, but it has no direct effect on Google Search or AI Overviews indexing speed.

How do I check if my robots.txt is blocking AI citation crawlers? +

Open yoursite.com/robots.txt and look for 'Disallow: /' under user agents like OAI-SearchBot, PerplexityBot, ClaudeBot, or ChatGPT-User. If any of these retrieval bots are blocked, your site is actively preventing AI assistants from citing you, and removing the rule fixes it immediately.

Why does an author need a stable @id in JSON-LD structured data? +

Without a stable @id, the same author name across multiple articles is treated as different entities by machines. A consistent @id links all articles to a single recognized author entity, allowing authority to accumulate and making it far more likely an AI model recognizes and cites that author's work.

What is a 'liftable unit' and why does it matter for AI citations? +

A liftable unit is a self-contained content fragment — a definition, comparison table, numbered steps, or statistic with source — that makes sense inside someone else's answer without the surrounding context. AI assistants cite portions, not whole articles, so content without liftable units is structurally uncitable.

How long does it take for an AI assistant to reflect fixes made to my site? +

After a push notification, a crawl can happen the same day, but updating what a model 'knows' takes longer — typically weeks rather than hours. Measure citation improvements over extended periods and across multiple queries, since the same question can yield different answers on different occasions.

Sources

  1. IndexNow Protocol – Official Documentation
  2. Schema.org Structured Data Validator
  3. OpenAI: GPTBot and OAI-SearchBot User Agent Documentation
  4. Google Search Central – Robots.txt Specification
  5. Innova GEO AI Indexer – WordPress Plugin

Related articles