ChatGPTPerplexityGemini
ChatGPT recommendsyour competitor.WellCited changes that.
Type your domain. Ten seconds, seven checks, and the exact reason you are not the one being cited.
No signup, no card. We read only what a crawler reads.
01 · READ
Seven checks. One hundred points.
Deterministic, published, and run against your live page. No model is involved in the score.
34 out of 100. Grade D.
Readable by people. Invisible to answer engines.
- AI crawler access
Seven of nine crawlers allowed. ClaudeBot and CCBot blocked at the root.
, 16 of 20 points. - Structured data (JSON-LD)
No application/ld+json block anywhere in the page source.
, 0 of 20 points. - Answer-shaped content
Two lists and one table. No question headings, no FAQ section.
, 6 of 20 points. - Content extractability
A JS-rendered shell: 940 characters of readable text in the raw HTML.
, 4 of 17 points. - Metadata & identity
Title, description and a complete Open Graph set. No canonical link.
, 8 of 10 points. - llms.txt
/llms.txt answers with the app shell as text/html, so it is not a file.
, 0 of 8 points. - Sitemap
No sitemap.xml, and no Sitemap: line in robots.txt.
, 0 of 5 points.
Crawler access
- GPTBot, Allowed.
- OAI-SearchBot, Allowed.
- ChatGPT-User, Allowed.
- ClaudeBot, Blocked.
- PerplexityBot, Allowed.
- Perplexity-User, Allowed.
- Google-Extended, Allowed.
- CCBot, Blocked.
- meta-externalagent, Allowed.
How the hundred points split
Points are fixed and public. We publish the rubric because a score you cannot reason about is a score you cannot act on.
How the audit runs, and what it does not do
The audit makes four requests and no more: your page, your robots.txt, your llms.txt and your sitemap.xml. It runs no browser, executes no JavaScript, follows redirects the way a crawler does, and gives up on a page that takes longer than twelve seconds to answer, because the engines give up too. Nothing is stored from the crawl except the report you are shown.
No language model scores anything. Every point below comes from a deterministic rule with a published threshold, which is what makes two audits of the same page comparable and what lets us give the whole thing away. The parts of the product that do use models (asking ChatGPT, Perplexity and Gemini your buyers' actual questions and recording which companies get named) are a different, paid thing, and they are downstream of this: an engine that cannot read your page has nothing to name you for.
What each check reads
Can AI crawlers reach you at all?
AI crawler access · 20
A root-level block is the only thing scored here, because it is the only thing that decides whether an engine may fetch the page. Nine crawlers feed the answers people now read instead of a list of links (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Perplexity-User, Google-Extended, CCBot and meta-externalagent), and each one is either allowed in or it is not.
The check resolves groups the way a real crawler does: a group that names GPTBot beats the wildcard group. So a site can refuse scrapers in general and still admit the engines it cares about. Most sites that fail this did not decide to fail it: a security plugin, a copied robots.txt or a well-meaning ops ticket did it for them, and nobody has read the file since.
The fix is one file and it takes ten minutes. Open robots.txt, find any group whose rules include Disallow: / (most often the wildcard group) and either remove that line or add a named group for each crawler you want to admit, with Allow: / underneath it. The named group wins, so a blanket refusal can stay in place for everything else. Deploy, then re-run the check: robots.txt is fetched live every time, so the result reflects what is being served rather than what somebody intended. If you are excluding an engine deliberately, that is a legitimate business decision and this check will go on reporting it accurately; a score is a measurement, not an instruction. What it should never be is an accident that nobody in the company knows about.
Does your markup say who you are?
Structured data (JSON-LD) · 20
Ten points for having structured data at all, five for a block that identifies the organisation, five for a rich type: FAQPage, Product, Article, HowTo, SoftwareApplication, BreadcrumbList or Review. Machines use it to resolve identity without inferring it from prose, and inference is exactly where somebody else's name gets substituted for yours.
This is not a ranking trick. It is the difference between a model knowing your product's name, category and homepage as facts, and reconstructing them from a headline and a nav bar. The cheapest available win on most sites is a single Organization block on the homepage: five minutes of work, and missing from the majority of the sites we audit.
Start with one Organization block on the homepage and nothing else. It needs a name and a url, plus, if you have them, a description, a logo and the profile URLs you already link to in the footer. Paste it into the head as a script of type application/ld+json; it changes nothing a visitor sees and nothing about how the page renders. Once that validates, add the rich type that matches what the page actually is: FAQPage where you answer questions, Product where you sell something, BreadcrumbList where there is a hierarchy. Do not add a type the page does not support. Structured data describing a page that does not exist is worse than none at all, because it is the one signal a machine is inclined to trust without checking.
Is the page shaped like an answer?
Answer-shaped content · 20
Eight points for three or more question-shaped headings, four for two or more lists, two for a table, six for a detectable FAQ section. None of it is about keywords. It is about whether a model can lift a self-contained answer out of your page without reassembling it from four paragraphs of narrative first.
The fastest fix is usually to rewrite a heading as the question its section answers, then put the answer in the first sentence underneath rather than the fourth. It reads better for people too, which is the only reason worth doing it. Tables and lists score because they are the two structures that survive being extracted with no surrounding context at all.
Take your three most important pages and read only their headings. If they are nouns like Features, Platform or Solutions, you have a brochure. Rewrite each one as the question a buyer would actually type, then make the first sentence underneath the complete answer and put the elaboration after it instead of before it. Add a table wherever you are comparing things and a list wherever you are enumerating them, because those two structures survive extraction with no surrounding context. And check that any FAQ answers are in the HTML rather than behind a script that reveals them on click: we found exactly that bug on this page, which is why our own FAQ is now a plain disclosure element that keeps every answer in the source whether it is open or shut.
Can a crawler read the page without running your JavaScript?
Content extractability · 17
We fetch the page once, with no browser and no JavaScript engine, and measure how much readable text is actually in that response and how much of the payload it represents. Most crawlers do the same thing. A page that assembles its content in the browser arrives as an empty shell, and an empty shell cannot be quoted no matter how good the content would have been.
This is the check that most often surprises a well-built site. A single-page app with excellent writing can score two out of seventeen, and a heavily hydrated server-rendered page can still come in thin because so much of what it ships is machinery rather than words. The fix is not subtle: server-render the pages you want quoted, and give them enough substance to be worth quoting.
Server-render the pages you want quoted. In a modern framework that is a configuration decision rather than a rewrite: mark the marketing and documentation routes as static or server-rendered and leave the interactive parts as islands. Then read the check's second number, the proportion of the response that is genuinely text. A page can be perfectly server-rendered and still come in thin, because hydration payload, class names and inline scripts outweigh the words. The remedy for that is not a smaller framework; it is more substance. If a page ships forty kilobytes of machinery to deliver two hundred words, the honest reading is that the page does not yet say very much, and this section of this site exists because our own audit said exactly that to us.
Does the page introduce itself?
Metadata & identity · 10
Two points for a title, three for a description between 50 and 170 characters, three for a complete Open Graph set, two for a canonical link. Boring, foundational, and about five minutes of work, which is why losing points here is the most annoying way to lose them.
The description carries more weight than it used to. It is short, it is written by you rather than extracted from you, and it is the single sentence most likely to be quoted back when a model needs one line about what a page is. A great many descriptions on the web were written for a search snippet years ago and have not been read by their owners since.
Write the description as a sentence rather than a keyword list, and keep it between fifty and a hundred and seventy characters: long enough to say what the page is, short enough to survive being quoted whole. Fill the Open Graph set with a title, a description and an image, because those three are what an answer engine and a chat client both fall back on when they need a preview. Add a canonical link even on pages with no duplicates, since it costs one tag and the failure mode without it is silent. Then read the title out loud. If it does not identify the company and the page in one breath, no amount of markup underneath it will repair the impression it makes.
Is there a map at /llms.txt?
llms.txt · 8
llms.txt is a proposed convention: a plain-text file at the root of a domain saying what the site is and which pages are worth reading first. Adoption is not universal and we will not pretend otherwise, which is precisely why it is worth eight points here and not thirty.
We require plain text, not an HTML page that happens to answer at that path. Sites that serve their app shell for every unknown URL fail this check, and correctly: a file that returns a rendered page is not a file. Writing one is cheap, it cannot hurt you, and the exercise forces the same clarity the checks that definitely matter also reward.
Write it by hand, or generate it (the tool on this site does it from your live pages in about ten seconds) and then check three things. It has to be served as text/plain at the root of the domain, not as a rendered page answering at that path. It has to open with a single line describing the business the way you would describe it out loud, because that line is the most quotable thing in the file. And the links under it have to be the pages you actually want read first, in that order, rather than a dump of the sitemap. A short honest map beats a long automated one: if part of the site is not worth a model's attention, leaving it out is the useful signal.
Are your crawl paths declared?
Sitemap · 5
Either a sitemap.xml that parses as one, or a Sitemap: line in robots.txt pointing at it. Five points, because it is the cheapest item on this list and every framework has a plugin, a route helper or a build step that produces one.
AI search indexes lean on the same crawl infrastructure as classic search, so a declared crawl path is still how a new page gets found quickly rather than eventually. It matters most for sites that publish often, which is most sites trying to get quoted in the first place.
Generate one at build time and reference it from robots.txt with a Sitemap: line. Every framework has a plugin, a route helper or a build step that produces it, and if yours does not, a hand-written file listing a dozen URLs still scores and still works. Include only pages you want indexed: a sitemap full of redirects, noindex pages and duplicates teaches a crawler to trust it less, which is the opposite of the point. Set lastModified from a real timestamp rather than from the build clock, because a sitemap in which every page changed this morning is a sitemap in which that field carries no information at all.
What a hundred out of a hundred does not mean
It does not mean an engine will recommend you. Every check on this page measures whether a machine CAN read, parse and quote your site. None of them measures whether it should; that depends on what your pages actually say, who else says it better, and how a given model weighs a thousand signals it has never published. A perfect score removes the reasons you are being skipped; it does not supply a reason to be chosen.
It scores one page, at one moment. The audit fetches a single URL and grades what came back. A homepage that scores a hundred can sit on top of a documentation section that scores twelve, and the pages a buyer's question actually resolves to are usually the deep ones. Re-run it against the pages you want quoted, not only the one you are proud of.
And it is a heuristic, not an oracle. No answer engine publishes its ranking function, so anyone claiming to have reverse-engineered one is guessing with confidence. What is knowable is on this page: whether the crawler was allowed in, whether the markup identifies you, whether the text is there to be read without a browser. We score the knowable part, we publish the rubric, and we say plainly where the certainty stops.
02 · ASK
We ask what your buyers ask.
The same question, put to each engine, and every answer kept word for word.
Your ranking did not change. Your pipeline did.
best AI visibility tool for a B2B SaaS site
For a B2B SaaS site, the tools people most often point to are Corvid Labs[1], which tracks brand mentions across answer engines, Halyard[2] for share-of-voice reporting, and Tinsel Metrics[3] if you want prompt-level tracking. All three publish structured documentation that's easy to cite.
Cited
- [1]corvidlabs.io/docs/overview
- [2]halyard.co/compare
- [3]tinselmetrics.com/llms.txt
A ranking is a position.An answer is a sentence.You are in it, or you are not.
03 · NAME
Who gets named instead of you.
Share of voice per engine, against the competitors you name. Every citation traced to the page that earned it.
per engine
- ChatGPT22%+6 week over week
- Perplexity31%+9 week over week
- Gemini11%−2 week over week
and rivals · share of namings
- Corvid Labs34%+2 week over week
- Halyard27%−1 week over week
- Tinsel Metrics21%−3 week over week
- acme.com18%+2 week over week
Claude is checked for crawler access only. AI Overviews and Copilot are on the roadmap — we label what we don’t do yet.
04 · FIX
We write the file, then re-crawl it.
llms.txt, JSON-LD and FAQ blocks generated from your own scan. A fix stays pending until the live page says otherwise.
- GET acme.com/llms.txt200 · text/plain · 412 bytes
- Body matches the artifactchecksum 7f2a…c104
- Marked live14:02 UTC
- Next scan measures the liftMonday 09:00
Schema and FAQ blocks are generated from your own scan. The llms.txt above is free on every audit.
See plans05 · WATCH
Then it does this every week.
Monday’s scan, the two fixes that would close the gap, and the chart of what shipped.
Illustration of the shape a fix queue produces: flat while nothing ships, stepped as each artifact goes live and the next scan picks it up.
- Priority 1. Publish /llms.txtone paste+8 pts
- Priority 2. Add FAQPage schema to /pricingone paste+6 pts
- Priority 3. Answer “how does dispatch routing work” on /product/dispatcha paragraph+4 pts
QUESTIONS
Before you type anything.
How is this different from a rank tracker?
A rank tracker tells you where a link sits in a list of ten. An answer engine doesn't return a list of ten; it returns a paragraph that names two or three companies. WellCited asks the engines your buyers' questions, keeps the paragraph, and tells you whether your name is in it and which page earned the citation.
Do you change my site?
No. We never ask for CMS access, we don't install a script, and there is no plugin. WellCited generates the file or the markup, you paste it in, and then you press verify, at which point we re-crawl the public URL and tell you what we actually found there.
Which engines do you sample?
ChatGPT, Perplexity and Gemini. Starter samples ChatGPT and Perplexity; Growth and Agency sample all three. We also check whether nine AI crawlers (including GPTBot, PerplexityBot, ClaudeBot and Google-Extended) are allowed to read your site at all, because that check is free and it is the one that most often comes back broken.
Does anything actually read llms.txt?
Adoption is not universal and we will not pretend otherwise. llms.txt is a proposed convention for giving a model a clean, linkable map of your site, and it costs one static file to publish. We generate it because it is cheap, harmless and occasionally decisive, and because writing it forces the structure that the checks which definitely matter, like schema and answer-shaped headings, also reward.
What does a scan cost in credits?
One credit is one prompt answered by one engine. On Starter that is 30 prompts across two engines, 60 credits a scan. Starter includes 350 credits a month, Growth 1,800, Agency 4,500, and scan packs are available if you want to run something extra without changing plan. Plan credits refresh each period; pack credits never expire.
Is the free audit really free?
Yes, and it needs no account. It runs seven heuristic checks against your live page. No language model is involved, so it costs us close to nothing and we have no reason to gate it. The score is never hidden behind a signup, because a score you cannot share is a score nobody sees.
Can I track competitors?
Yes: three on Starter, five on Growth and ten on Agency. You name them, and every scan records when an engine reached for one of them instead of you, which prompt it happened on, and which of their pages was cited. That last part is usually the most useful thing on the screen.
Do I have to talk to anyone?
No. There is no demo to book, no seat count to negotiate and no discovery call. Sign up, paste a domain, run a scan. If something breaks, email us and a human answers. That is the only conversation on offer.
Is my scorecard public?
Yes. Every free audit publishes a page at its own address, and that page shows the score, the grade, all seven checks and the crawler table to anyone who has the link. The address contains a random token, so nobody can enumerate the audits or harvest the domains that have been run. But a link, once shared, is a link. Reports are never deleted for scoring badly: the number is the product, and hiding it would defeat the point of publishing it.
What happens if I audit the same site twice?
You get a new scorecard at a new address, and the previous one stays where it is. Only the newest audit of a domain is marked canonical: the older pages keep working for anyone who already has the link, they carry a banner pointing at the current report, and they tell search engines to index the current one instead. That is why a re-audit never breaks a link you have already shared.
How quickly can a score move?
Six of the seven checks are things you can change in an afternoon: a robots.txt line, an Organization block, a description, an llms.txt, a sitemap, a heading rewritten as the question it answers. The seventh, content extractability, is a rendering decision and can take a sprint. Re-run the audit as soon as the change is live: it fetches the page fresh every time, so the new number reflects what is actually being served, not what we remember.
What happens to the files if I cancel?
They keep working. Everything WellCited generates is plain text or plain markup that lives on your own server: an llms.txt file, a JSON-LD block, a heading rewritten in your own CMS. There is nothing to disconnect, no script to remove, and no part of it stops functioning when the subscription does. What you lose by cancelling is the weekly re-scan and the verification, not the work.
Now run it on yours.
Same seven checks, same ten seconds, still no signup.
For a B2B SaaS site, Acme[1] is the one most often cited. It publishes a machine-readable llms.txt, marks up its pricing and FAQ in schema, and answers the question in the first paragraph of the page. Corvid Labs and Halyard are the usual alternatives.
No signup, no card. We read only what a crawler reads.