A website is invisible to ChatGPT, Claude, Perplexity or Gemini for one of six mechanical reasons: the assistant's crawler cannot read it, the business entity is ambiguous, the structured data is missing or contradicts itself, the content hedges instead of answering, nothing off-site corroborates it, or there is no first-party fact file for the assistant to read. None of these is mysterious. Each can be checked from outside, and each has a specific fix.

What follows is the mechanics, in the order an assistant encounters them.

How an assistant answers "who is a good X in Edmonton"

When someone asks an assistant for a recommendation, most current systems do some version of the same thing: turn the question into one or more web searches, fetch a handful of the results with their own crawler, extract what those pages say, and compose an answer that names two or three businesses and, sometimes, cites the pages it drew from. There is no page two of that answer. The business is in it or it is not part of the conversation.

Reason 1: the crawler cannot read the site

If the assistant's crawler is blocked, the assistant can only describe your business from what other sites say about it. Each AI company fetches pages with its own named user agent: OpenAI uses GPTBot for training and OAI-SearchBot and ChatGPT-User for live retrieval; Anthropic uses ClaudeBot; Perplexity uses PerplexityBot and Perplexity-User; Google uses Google-Extended for its AI products. A Disallow rule in robots.txt, a firewall or CDN rule that challenges unknown bots, or a security plugin's default list can block any of them without anyone at the business having decided to.

The second version of this problem is content that is not in the served HTML. If the page arrives as an empty shell and the text is injected by JavaScript after load, a crawler that does not execute scripts sees nothing. The check is simple: view the page source, not the rendered page, and look for your own paragraphs.

Reason 2: the entity is ambiguous

If a machine cannot tell which business you are, it will not recommend you, because it cannot be sure the reviews, prices and location it found are yours. Assistants reason about entities, not keywords. "Summit Plumbing" is a string; the specific company at a specific domain in a specific city, established in a specific year, is an entity.

Ambiguity comes from common words in the name (there are unrelated agencies using the word "Unconventional", which is why Unconventional Group's structured data carries a disambiguating description naming its domain and city), from name-address-phone details written differently across the site and directories, and from a site that never states its founding year, founder or location in plain text. The fix is one canonical Organization node with a stable @id, a disambiguatingDescription, sameAs links to real profiles, and the same facts stated in prose on the about page.

Reason 3: structured data is missing, or worse, contradicts itself

Structured data tells a machine what the page is about without making it infer; missing structured data leaves the assistant guessing, and contradictory structured data makes it distrust the page. The most common failures are not absence. They are two Organization nodes emitted by two different plugins with two different phone numbers; a retired service still listed in the markup; a price in the Offer node that does not match the price on the page; and FAQPage markup on a page with no visible FAQ.

The value of schema is not the count of blocks. It is whether the markup is valid, complete, consistent with itself, and in agreement with what a person sees.

Reason 4: the content hedges instead of answering

Assistants lift paragraphs that lead with the claim; a paragraph that builds toward its point cannot be quoted, and a page that says "it depends, contact us" cannot be cited by anyone. This is the reason most businesses with technically fine sites are still absent, and it is a writing problem rather than a markup problem.

Answer-shaped content has three properties. The first sentence of a section answers the question the heading asks. The business is named ("Unconventional Group's SEO pass is $1,500 to $2,000") rather than referred to as "we", because a model quoting the sentence then carries the brand and a pronoun carries nothing. And numbers are stated where numbers exist: assistants preferentially quote sources with concrete figures, which is the mechanical reason to publish prices. A page that names its price will be quoted over a competitor's page that does not.

Reason 5: nothing off-site corroborates the site

Assistants retrieve from sources they already trust, and a business's own website is the weakest possible witness to its own quality. A site can be perfectly readable, unambiguous and answer-shaped, and still lose the citation to a competitor whose Google Business Profile is complete, who appears in the two directories the assistant fetched, and whose reviews mention the service by name.

The work here is unglamorous: Google Business Profile completeness and correct categorization, the directory and aggregator set relevant to the industry, association listings, and an exact-string name-address-phone audit across all of them, with each profile linked from the site's sameAs so the self-claim and the third-party claim agree.

Reason 6: there is no first-party fact file

Without an llms.txt file, an assistant assembles your story from fragments; with one, it can read your facts in one fetch, in your words. llms.txt is a plain-text file at the domain root stating what the business is, what it sells, what it costs, where it is, and what it does not claim, with a long-form llms-full.txt for the detail. It is a proposed convention rather than a ratified standard and the evidence for its weight is thin. It is still worth an afternoon: it is cheap, it is honest, and a first-party statement of limits ("results are typical, not guaranteed"; "this service was retired") is the lowest-cost guardrail against being described inaccurately. A stale one actively hurts, so it has to be kept in sync with the site.

The reason that is not on the list: nondeterminism

Even with all six fixed, an assistant can name you today and not tomorrow, because both its retrieval and its generation vary from run to run. This is why "I asked ChatGPT and it named us" proves little, why a proper measurement runs a fixed prompt set several times and reports mention rate and citation rate, and why no vendor can honestly guarantee a recommendation. Unconventional Group's AI visibility tracking product runs 20 to 40 buyer-intent prompts on a schedule, stores every response and scores them against a baseline, with a three-month minimum because one month of data cannot separate a trend from noise.

Finding out which one is yours

Odin, Unconventional Group's free auditor at unconventionalgroup.ca/odin, scores a site out of 100 in about thirty seconds, with 50 points for search readiness and 50 for AI visibility across structured data completeness, entity clarity, AI crawler access, llms.txt, answer-shaped content and citation-worthiness. Every point is computed from what it observes, and every deduction shows the evidence that produced it. The AI half of the scorecard is a direct map of reasons one through six.

Fixing them is what the AEO / AI-visibility engineering pass does, at $1,500 to $2,000 one-time. The result is measured, not promised: clients typically see movement in 14 to 90 days, measured against a baseline captured before the work starts. That is a typical-results claim, not a guarantee.