<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Josh Adams</title>
    <description>The latest articles on DEV Community by Josh Adams (@joshadams_kollavo).</description>
    <link>https://dev.to/joshadams_kollavo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4206542%2Fd6615280-eeb7-4e5b-b251-3edb944f3179.png</url>
      <title>DEV Community: Josh Adams</title>
      <link>https://dev.to/joshadams_kollavo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joshadams_kollavo"/>
    <language>en</language>
    <item>
      <title>How AI answer engines pick their sources (and how to get your SaaS cited)</title>
      <dc:creator>Josh Adams</dc:creator>
      <pubDate>Sun, 25 Oct 2026 12:47:26 +0000</pubDate>
      <link>https://dev.to/joshadams_kollavo/how-ai-answer-engines-pick-their-sources-and-how-to-get-your-saas-cited-4fh9</link>
      <guid>https://dev.to/joshadams_kollavo/how-ai-answer-engines-pick-their-sources-and-how-to-get-your-saas-cited-4fh9</guid>
      <description>&lt;p&gt;Ask ChatGPT or Perplexity "what's the best tool for X?" and you get a neat paragraph with a few linked sources. If your product is in your buyers' answers, great. If it isn't, it's worth asking why, and the reason usually isn't magic.&lt;/p&gt;

&lt;p&gt;This post covers how answer engines decide what to cite, which parts you can influence, and how to measure it without guessing. Some people call this GEO (generative engine optimization) or AEO (answer engine optimization). Most of it is just good engineering hygiene plus being present where your buyers already look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways a model "knows" about you
&lt;/h2&gt;

&lt;p&gt;It helps to separate two mechanisms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Training data.&lt;/strong&gt; The model learned something about your product during pre-training. That knowledge is frozen at a cutoff date, comes with no citation, and you can't update it on demand. If your product launched after the cutoff, or barely appeared on the public web before it, the model may simply not know you exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Retrieval (live search / grounding).&lt;/strong&gt; For many queries, especially "best", "vs", "alternatives" and "pricing" questions, the engine runs one or more web searches, fetches pages, and writes an answer grounded in those pages. &lt;strong&gt;This is where citations come from.&lt;/strong&gt; Perplexity is retrieval-first. ChatGPT, Claude and Gemini search when the question needs fresh or specific information. Google's AI Overviews and AI Mode sit on top of Google Search's index, and Google says they may use a &lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;"query fan-out" technique&lt;/a&gt;: several related searches across subtopics, then a synthesized answer.&lt;/p&gt;

&lt;p&gt;The practical takeaway: &lt;strong&gt;you can't edit training data, but you can influence retrieval.&lt;/strong&gt; And retrieval rewards the same things it always has: being indexable, relevant and trusted, and showing up in the result sets the engine pulls from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why third-party sources matter more than your homepage
&lt;/h2&gt;

&lt;p&gt;Look at the citations under a "best [category] tools" answer and you'll usually see a mix like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listicles and comparison articles ("10 best X in 2026")&lt;/li&gt;
&lt;li&gt;Review platforms and software directories&lt;/li&gt;
&lt;li&gt;Reddit threads and community forums&lt;/li&gt;
&lt;li&gt;Documentation, GitHub READMEs, and help centers&lt;/li&gt;
&lt;li&gt;Occasionally, vendor pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes sense. When someone asks "which tool should I use?", a neutral roundup is a more useful source than a vendor's own landing page. An engine running fan-out searches will pull the pages that rank for those sub-queries, and those are mostly third-party pages.&lt;/p&gt;

&lt;p&gt;So for a SaaS, a big part of getting cited is &lt;strong&gt;being mentioned, accurately, on the pages that get cited for your category.&lt;/strong&gt; Concretely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Directories and review sites&lt;/strong&gt; relevant to your niche: keep the listing complete, with the correct category, current pricing, and a clear one-line description.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparison and "alternatives" articles&lt;/strong&gt;: if one ranks for your category and leaves you out, reach out to the author with accurate facts. Don't spam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communities&lt;/strong&gt;: take part genuinely where your users already hang out. Answer questions, disclose that you work on the product, and don't astroturf. Communities notice, and so does everyone reading the thread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs and integrations&lt;/strong&gt;: public docs, integration pages on partners' sites, and well-maintained READMEs are things engines can actually quote.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Make your own pages easy to quote
&lt;/h2&gt;

&lt;p&gt;Your site still matters, especially for factual questions ("does X support SSO?", "how much does X cost?", "does X integrate with Postgres?"). Engines extract passages, so write pages that hold up when quoted out of context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clear, factual pages.&lt;/strong&gt; Have one page per important fact cluster: pricing, integrations, security/compliance, a feature overview, and an honest "X vs Y" page if you have one. Put the answer in the first sentence or two, then the detail. Keep things like plan names, limits and supported platforms in plain HTML text, not baked into images or hidden behind client-side rendering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data.&lt;/strong&gt; &lt;a href="https://schema.org/" rel="noopener noreferrer"&gt;Schema.org&lt;/a&gt; markup (&lt;code&gt;Organization&lt;/code&gt;, &lt;code&gt;SoftwareApplication&lt;/code&gt;, &lt;code&gt;Product&lt;/code&gt;, &lt;code&gt;FAQPage&lt;/code&gt;, &lt;code&gt;BreadcrumbList&lt;/code&gt;) helps machines understand what a page is about. Keep expectations realistic, though. Google states there's &lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;no special schema required for AI Overviews or AI Mode&lt;/a&gt;, and it asks that structured data match the visible text. Treat schema as helpful hygiene, not a ranking hack.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SoftwareApplication&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YourApp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;applicationCategory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;BusinessApplication&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;operatingSystem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Web&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Offer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;29&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;priceCurrency&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;llms.txt.&lt;/strong&gt; &lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;llms.txt&lt;/a&gt; is a proposed convention: a Markdown file at &lt;code&gt;/llms.txt&lt;/code&gt; that gives LLMs a curated map of your most useful content. It's cheap to add and handy for docs-heavy products, especially when developers paste your docs into coding assistants. It's still a proposal, though, not something every engine is known to consume, and Google says you don't need new "AI text files" to appear in its AI features. Add it if it's easy, and don't expect it to move the needle on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't accidentally block the crawlers
&lt;/h2&gt;

&lt;p&gt;This one is surprisingly common. A security rule, a CDN bot-protection toggle, or a copy-pasted "block all AI bots" robots.txt can quietly remove you from retrieval.&lt;/p&gt;

&lt;p&gt;Most vendors now split crawlers by purpose, so you can opt out of training without opting out of search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI&lt;/strong&gt; documents separate agents for training (&lt;code&gt;GPTBot&lt;/code&gt;), search (&lt;code&gt;OAI-SearchBot&lt;/code&gt;) and user-initiated fetches (&lt;code&gt;ChatGPT-User&lt;/code&gt;). See &lt;a href="https://platform.openai.com/docs/bots" rel="noopener noreferrer"&gt;OpenAI's crawler docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic&lt;/strong&gt; lists &lt;code&gt;ClaudeBot&lt;/code&gt; (training), &lt;code&gt;Claude-SearchBot&lt;/code&gt; (search indexing) and &lt;code&gt;Claude-User&lt;/code&gt; (fetches on a user's behalf), and notes that blocking the latter two may reduce your visibility. See &lt;a href="https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler" rel="noopener noreferrer"&gt;Anthropic's help article&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perplexity&lt;/strong&gt; documents &lt;code&gt;PerplexityBot&lt;/code&gt; and &lt;code&gt;Perplexity-User&lt;/code&gt;. See &lt;a href="https://docs.perplexity.ai/guides/bots" rel="noopener noreferrer"&gt;Perplexity's bot docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google&lt;/strong&gt;: AI Overviews and AI Mode are governed by normal &lt;code&gt;Googlebot&lt;/code&gt; access. &lt;code&gt;Google-Extended&lt;/code&gt; controls use in some of Google's other AI systems, not Search (&lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;Google's docs&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example that opts out of training but stays citable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: GPTBot
Disallow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: Claude-User
Allow: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whether to allow training crawlers is your call. Just make it a deliberate decision. Then check your server or CDN logs to confirm the search and user agents actually get &lt;code&gt;200&lt;/code&gt;s and not &lt;code&gt;403&lt;/code&gt;s. A clean robots.txt doesn't help if your WAF blocks the request first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure it like you'd measure anything else
&lt;/h2&gt;

&lt;p&gt;"Are we visible in AI answers?" is answerable, roughly, with a small and boring process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write down your buyers' prompts.&lt;/strong&gt; Use 20–50 real questions, taken from sales calls, support tickets and search queries. Mix category questions ("best open-source feature flag tool"), comparisons ("X vs Y"), and problem questions ("how do I do Z without a backend").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run them across engines.&lt;/strong&gt; Cover ChatGPT, Perplexity, Gemini, Claude and Google AI Overviews. Use fresh sessions and note the date, since answers vary between runs and over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record two things per answer:&lt;/strong&gt; whether your product is mentioned (and how accurately), and &lt;strong&gt;which domains are cited&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregate the cited domains.&lt;/strong&gt; You'll usually find a fairly short list of sites that keep coming up for your category. That list is your to-do list: those are the pages to be present and accurate on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeat monthly.&lt;/strong&gt; Track mention rate and citation share over time, not individual answers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A spreadsheet works fine to start. If you'd rather automate it, tools exist for this. For example, &lt;a href="https://kollavo.com" rel="noopener noreferrer"&gt;Kollavo&lt;/a&gt; tracks which sources AI engines cite for your buyers' prompts, helps you get listed on them, and offers a free AI visibility score as a starting point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Search and user-fetch agents (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Googlebot) allowed in robots.txt &lt;strong&gt;and&lt;/strong&gt; at the CDN/WAF&lt;/li&gt;
&lt;li&gt;[ ] Key facts (pricing, integrations, security, platforms) on crawlable, server-rendered HTML pages&lt;/li&gt;
&lt;li&gt;[ ] Answer-first writing: each page states its main fact up top&lt;/li&gt;
&lt;li&gt;[ ] Schema.org markup that matches visible content&lt;/li&gt;
&lt;li&gt;[ ] Optional &lt;code&gt;/llms.txt&lt;/code&gt; pointing to your best docs&lt;/li&gt;
&lt;li&gt;[ ] Complete, accurate listings on the directories and review sites in your niche&lt;/li&gt;
&lt;li&gt;[ ] Accurate presence in the comparison and "alternatives" articles engines cite&lt;/li&gt;
&lt;li&gt;[ ] Genuine, disclosed participation in relevant communities&lt;/li&gt;
&lt;li&gt;[ ] A fixed set of buyer prompts, run monthly across engines, with cited domains logged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is a trick. Answer engines are retrieval systems sitting on top of the web, so being crawlable, clear, and present where your category gets discussed is most of the work.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written by Josh Adams.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
