<?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: Reza Pratama</title>
    <description>The latest articles on DEV Community by Reza Pratama (@rezapratama_serpair).</description>
    <link>https://dev.to/rezapratama_serpair</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%2F4188578%2Fabc28a04-f318-4a99-8370-53e01a7fe923.png</url>
      <title>DEV Community: Reza Pratama</title>
      <link>https://dev.to/rezapratama_serpair</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rezapratama_serpair"/>
    <language>en</language>
    <item>
      <title>Search bots vs training bots: a robots.txt map for Google, ChatGPT and Perplexity</title>
      <dc:creator>Reza Pratama</dc:creator>
      <pubDate>Wed, 04 Nov 2026 00:37:27 +0000</pubDate>
      <link>https://dev.to/rezapratama_serpair/search-bots-vs-training-bots-a-robotstxt-map-for-google-chatgpt-and-perplexity-ppa</link>
      <guid>https://dev.to/rezapratama_serpair/search-bots-vs-training-bots-a-robotstxt-map-for-google-chatgpt-and-perplexity-ppa</guid>
      <description>&lt;p&gt;Here is a robots.txt pattern worth checking for. A long block of AI bot names, copied from a forum thread, all set to &lt;code&gt;Disallow: /&lt;/code&gt;. The goal is usually to stop content being used to train models. But the same founder often also wants ChatGPT and Perplexity to recommend their product.&lt;/p&gt;

&lt;p&gt;Those two goals can live in the same file. A copied block like that often doesn't do it, because it blocks both kinds of bot.&lt;/p&gt;

&lt;p&gt;Google's John Mueller touched on this in a recent interview reported by &lt;a href="https://www.searchenginejournal.com/google-says-technical-seo-remains-key-for-ai-seo/595550/" rel="noopener noreferrer"&gt;Search Engine Journal&lt;/a&gt;. He said AI systems "crawl slightly differently" because "they want to do it for training versus just like getting the freshest content." Then he added: "that's just is like another flavor of technical SEO."&lt;/p&gt;

&lt;p&gt;So here is that flavor, written down. I went through the crawler docs from Google, OpenAI and Perplexity and sorted each bot by what it is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two kinds of AI bot
&lt;/h2&gt;

&lt;p&gt;Most AI companies now separate their bots by job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search or answer bots&lt;/strong&gt; fetch pages so the product can show and link them in answers. Block these and you can drop out of those answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training bots or tokens&lt;/strong&gt; decide whether your content may be used to train models. Block these and, according to the docs below, your search visibility in that product is not the thing you are switching off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also a third group: fetchers that run when a user asks a question. Their docs say robots.txt may not apply to them, so they are not a lever you control in the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google
&lt;/h2&gt;

&lt;p&gt;Google's &lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;AI features guide&lt;/a&gt; says robots.txt rules for &lt;code&gt;Googlebot&lt;/code&gt; are the control for how your site is crawled for Search, and AI Overviews and AI Mode are part of Search. To limit what is shown from a page, it points to &lt;code&gt;nosnippet&lt;/code&gt;, &lt;code&gt;data-nosnippet&lt;/code&gt;, &lt;code&gt;max-snippet&lt;/code&gt; and &lt;code&gt;noindex&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Training and Gemini grounding are a separate control. Google's &lt;a href="https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers" rel="noopener noreferrer"&gt;list of common crawlers&lt;/a&gt; describes &lt;code&gt;Google-Extended&lt;/code&gt; as a robots.txt token that manages whether content Google crawls may be used to train future Gemini models and for grounding in Gemini Apps and Vertex AI. The same page says it does not affect inclusion in Google Search and is not a ranking signal.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;th&gt;What it controls&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Googlebot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google Search, including AI Overviews and AI Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Google-Extended&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gemini training and grounding, not Search inclusion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  OpenAI (ChatGPT)
&lt;/h2&gt;

&lt;p&gt;OpenAI's &lt;a href="https://platform.openai.com/docs/bots" rel="noopener noreferrer"&gt;crawler docs&lt;/a&gt; say each setting is independent:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;User agent&lt;/th&gt;
&lt;th&gt;What it is for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OAI-SearchBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Surfacing sites in ChatGPT search. Opted out sites will not be shown in ChatGPT search answers, though they can still appear as navigational links.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPTBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Crawling content that may be used to train OpenAI's foundation models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ChatGPT-User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Visits triggered by a user's request. OpenAI says robots.txt rules may not apply, and it is not used to decide what appears in search.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OpenAI also notes it can take about 24 hours for its search systems to pick up a robots.txt change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perplexity
&lt;/h2&gt;

&lt;p&gt;Perplexity's &lt;a href="https://docs.perplexity.ai/guides/bots" rel="noopener noreferrer"&gt;bot docs&lt;/a&gt; list two:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;User agent&lt;/th&gt;
&lt;th&gt;What it is for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PerplexityBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Surfacing and linking sites in Perplexity search results. Perplexity says it is not used to crawl content for AI foundation models.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Perplexity-User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetches when a user asks a question. Perplexity says it generally ignores robots.txt because a user asked for it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A robots.txt that matches both goals
&lt;/h2&gt;

&lt;p&gt;If your goal is "show up in AI answers, but don't train on my content", a file built from those docs could look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Search and answer bots: allowed
User-agent: Googlebot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

# Training controls: opted out
User-agent: GPTBot
Disallow: /

User-agent: Google-Extended
Disallow: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Be aware of one tradeoff. Per Google's docs, blocking &lt;code&gt;Google-Extended&lt;/code&gt; also opts you out of grounding in the Gemini app, not only training. If showing up in Gemini answers matters to you, you might choose to leave it allowed. That is the point of this whole post: make each line a decision, not a copy and paste.&lt;/p&gt;

&lt;h2&gt;
  
  
  robots.txt is not the whole story
&lt;/h2&gt;

&lt;p&gt;Your firewall or CDN can block a bot that robots.txt allows. Google's AI features guide lists "ensuring that crawling is allowed in robots.txt, and by any CDN or hosting infrastructure" as an SEO basic. OpenAI and Perplexity both publish IP ranges and recommend allowing requests from them. Perplexity's docs even include Cloudflare and AWS WAF steps, and warn that Cloudflare's Bot Fight Mode can still challenge its bot.&lt;/p&gt;

&lt;p&gt;Three quick checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. What does your live robots.txt actually say?&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://yourdomain.com/robots.txt

&lt;span class="c"&gt;# 2. Are the search bots in your server or CDN logs at all?&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"OAI-SearchBot|PerplexityBot|Googlebot"&lt;/span&gt; access.log | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;

&lt;span class="c"&gt;# 3. Are they getting 200s, or 403s from a bot rule?&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"OAI-SearchBot|PerplexityBot"&lt;/span&gt; access.log | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $9}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One caution from Google's docs: user agent strings can be spoofed. If you are writing allow rules, match the published IP ranges too, not only the name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then watch what happens
&lt;/h2&gt;

&lt;p&gt;Changing robots.txt is easy. Knowing whether it helped is harder, because AI answers vary from one run to the next and changes take time to show up. I'd write down the date of the change, keep a fixed list of buyer questions, and check them again over the following weeks in ChatGPT, Perplexity and Google.&lt;/p&gt;

&lt;p&gt;I work at Serpair, which tracks Google rankings and AI mentions over time so you can line them up against what you changed. If you want a starting point, our &lt;a href="https://serpair.com/free-seo-geo-analysis?utm_source=devto&amp;amp;utm_campaign=first50&amp;amp;utm_content=scout" rel="noopener noreferrer"&gt;free SEO and AI visibility check&lt;/a&gt; shows where your domain stands today, no sign-up needed.&lt;/p&gt;

&lt;p&gt;What does your robots.txt say about AI bots right now? I'm curious how many people have an AI block in there they don't remember adding.&lt;/p&gt;

</description>
      <category>seoaiwebdevdevops</category>
    </item>
    <item>
      <title>Google says there is no special trick for AI Overviews. Here is what that means for your site.</title>
      <dc:creator>Reza Pratama</dc:creator>
      <pubDate>Sat, 31 Oct 2026 03:25:58 +0000</pubDate>
      <link>https://dev.to/rezapratama_serpair/google-says-there-is-no-special-trick-for-ai-overviews-here-is-what-that-means-for-your-site-2m6</link>
      <guid>https://dev.to/rezapratama_serpair/google-says-there-is-no-special-trick-for-ai-overviews-here-is-what-that-means-for-your-site-2m6</guid>
      <description>&lt;p&gt;A lot of founders I talk to want a special recipe for getting into Google AI Overviews. A new file, a new tag, a new kind of schema. So I went back and read what Google itself says. The answer is less exciting, but it is more useful.&lt;/p&gt;

&lt;p&gt;Google's page on &lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;AI features and your website&lt;/a&gt; says it directly. There are no additional requirements to appear in AI Overviews or AI Mode, and no special optimizations are needed. You don't need new machine readable files, AI text files or special schema.org markup.&lt;/p&gt;

&lt;p&gt;That doesn't mean there is nothing to do. It means the work is normal Search work, plus a couple of settings that can quietly take you out. Here is what Google's docs say, turned into checks you can do this weekend.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The one hard rule: indexed, with a snippet
&lt;/h2&gt;

&lt;p&gt;Google gives one technical requirement for being shown as a supporting link in AI Overviews or AI Mode. The page must be indexed and eligible to be shown in Google Search with a snippet.&lt;/p&gt;

&lt;p&gt;Both halves matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indexed.&lt;/strong&gt; Open Google Search Console, paste the URL into the URL Inspection tool, and check that the page is on Google. If your most important page (pricing, the main feature page, the "what is X" page) isn't indexed, nothing else in this post will help yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eligible for a snippet.&lt;/strong&gt; This is the part people miss. Google lists &lt;code&gt;nosnippet&lt;/code&gt;, &lt;code&gt;data-nosnippet&lt;/code&gt;, &lt;code&gt;max-snippet&lt;/code&gt; and &lt;code&gt;noindex&lt;/code&gt; as the controls that limit what is shown from your pages in Search, and that includes AI features. Sometimes they were added on purpose and forgotten, and sometimes a theme or plugin added them.&lt;/p&gt;

&lt;p&gt;A quick way to check one page from your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Look for snippet controls in the HTML meta tags&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://yourdomain.com/pricing | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-iE&lt;/span&gt; &lt;span class="s1"&gt;'nosnippet|max-snippet|noindex'&lt;/span&gt;

&lt;span class="c"&gt;# Look for the same controls sent as an HTTP header&lt;/span&gt;
curl &lt;span class="nt"&gt;-sI&lt;/span&gt; https://yourdomain.com/pricing | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'x-robots-tag'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If nothing comes back, good. If you see &lt;code&gt;nosnippet&lt;/code&gt; or a very small &lt;code&gt;max-snippet&lt;/code&gt; value, ask why it is there. A &lt;code&gt;data-nosnippet&lt;/code&gt; attribute on a block of text hides only that block, so check it isn't wrapped around the paragraph that actually explains your product.&lt;/p&gt;

&lt;p&gt;Remember that Googlebot may see different HTML than your browser. The URL Inspection tool shows the HTML Google received when it crawled the page, which is the version that counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Google-Extended is not what many people think
&lt;/h2&gt;

&lt;p&gt;This is the setting I would check first, because it is easy to get wrong in both directions.&lt;/p&gt;

&lt;p&gt;Google's &lt;a href="https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers" rel="noopener noreferrer"&gt;list of common crawlers&lt;/a&gt; describes &lt;code&gt;Google-Extended&lt;/code&gt; as a robots.txt token. It doesn't crawl on its own. It controls whether content Google crawls from your site may be used for two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;training future Gemini models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;grounding&lt;/strong&gt; in Gemini Apps and in Grounding with Google Search on Vertex AI. Grounding means giving the model content from the Google Search index at the moment someone asks a question.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same page also says Google-Extended does not affect inclusion in Google Search and is not a ranking signal.&lt;/p&gt;

&lt;p&gt;So here is the trade-off in plain words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blocking &lt;code&gt;Google-Extended&lt;/code&gt; does &lt;strong&gt;not&lt;/strong&gt; remove you from Google Search, and Google's AI features doc says the control for AI Overviews and AI Mode is Googlebot plus the snippet controls above.&lt;/li&gt;
&lt;li&gt;Blocking &lt;code&gt;Google-Extended&lt;/code&gt; &lt;strong&gt;does&lt;/strong&gt; opt your content out of grounding in the Gemini app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some sites added a block like this when AI training became a hot topic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Google&lt;/span&gt;-&lt;span class="n"&gt;Extended&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a fair choice if you don't want your content used for training. But if you want to show up when someone asks Gemini about your category, you have turned that off too. Make the choice on purpose.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;https://yourdomain.com/robots.txt&lt;/code&gt; now and look for &lt;code&gt;Google-Extended&lt;/code&gt;. Also check that you aren't blocking &lt;code&gt;Googlebot&lt;/code&gt; from pages you care about. Google says robots.txt rules for Googlebot are the control for how your site is crawled for Search, and its list of SEO basics includes allowing crawling "by any CDN or hosting infrastructure". Some bot protection settings block crawlers even when robots.txt allows them, so a clean robots.txt is not the whole story.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Write for the follow-up questions, not only the main one
&lt;/h2&gt;

&lt;p&gt;Google's doc explains that AI Overviews and AI Mode may use a "query fan-out" technique. That means issuing several related searches across subtopics to build one answer. It also says AI Mode is meant for questions that need more exploration or comparison.&lt;/p&gt;

&lt;p&gt;So the answer is built from the smaller questions around the main one. For a typical SaaS product, those are things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who is it for, and who is it not for?&lt;/li&gt;
&lt;li&gt;How does it compare with the usual alternative?&lt;/li&gt;
&lt;li&gt;What does it cost, and is there a free trial?&lt;/li&gt;
&lt;li&gt;How long does setup take?&lt;/li&gt;
&lt;li&gt;What does it not do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those answers only live in sales calls or support chats, there is nothing on the open web for Google to link to. You don't need a new page for each. A clear section on an existing page, with the answer in plain text near the top, is often enough. Google's own list of best practices includes "making sure that important content is available in textual form". So an answer that only exists in an image, a video, or a tab that needs a click to load is harder to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Measure in the place Google points you to
&lt;/h2&gt;

&lt;p&gt;People often ask how to see AI Overviews traffic on its own. Google's answer, on the same page, is that sites showing in AI Overviews and AI Mode are counted in the overall search traffic in Search Console. It sits in the Performance report under the "Web" search type. It isn't split out as its own line.&lt;/p&gt;

&lt;p&gt;That changes how I'd measure. You can't open one report that says "AI Overviews: X clicks". What you can do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick a short list of real buyer questions in your category, plus the pages you want to be linked for.&lt;/li&gt;
&lt;li&gt;In Search Console, watch impressions and clicks for those queries and pages over weeks, not days.&lt;/li&gt;
&lt;li&gt;Every so often, search those questions yourself in a logged out browser. Note whether an AI Overview shows up, which sites it links to, and whether you are one of them.&lt;/li&gt;
&lt;li&gt;Ask the same questions in the Gemini app and note who it names.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Google also says AI Overviews often don't show up at all, because they only appear when Google decides they add something beyond the normal results. So "no AI Overview for this query" is a normal result. It is not a sign you did something wrong.&lt;/p&gt;

&lt;p&gt;One check tells you very little. Checks spread over a couple of months start to show a pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 20-minute checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] URL Inspection: your top 3 pages are indexed.&lt;/li&gt;
&lt;li&gt;[ ] No unwanted &lt;code&gt;nosnippet&lt;/code&gt;, &lt;code&gt;max-snippet&lt;/code&gt; or &lt;code&gt;noindex&lt;/code&gt; in the HTML or &lt;code&gt;X-Robots-Tag&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;data-nosnippet&lt;/code&gt; isn't hiding your main product description.&lt;/li&gt;
&lt;li&gt;[ ] robots.txt: &lt;code&gt;Googlebot&lt;/code&gt; can reach important pages, and any &lt;code&gt;Google-Extended&lt;/code&gt; rule is a choice you made on purpose.&lt;/li&gt;
&lt;li&gt;[ ] Your CDN or bot protection isn't blocking Googlebot.&lt;/li&gt;
&lt;li&gt;[ ] The common follow-up questions about your product are answered in plain text somewhere on the site.&lt;/li&gt;
&lt;li&gt;[ ] You have a short list of buyer questions to check again in a few weeks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where I'd start
&lt;/h2&gt;

&lt;p&gt;None of this is a trick, and Google is clear that meeting every requirement still doesn't guarantee a page will be crawled, indexed or shown. But the snippet controls and the Google-Extended rule are two settings that can quietly take you out, and they take minutes to check.&lt;/p&gt;

&lt;p&gt;Disclosure: I work at Serpair. We build a growth-journey tracker that keeps a history of your Google rankings, AI mentions and competitors, so you can see which changes actually worked. If you want a quick first snapshot before you start changing things, there is a &lt;a href="https://serpair.com/free-seo-geo-analysis?utm_source=devto&amp;amp;utm_campaign=first50&amp;amp;utm_content=scout" rel="noopener noreferrer"&gt;free Insights check&lt;/a&gt; that runs from your public domain, with no signup. The checklist above works fine without it, though.&lt;/p&gt;

&lt;p&gt;If you find a forgotten &lt;code&gt;nosnippet&lt;/code&gt; or &lt;code&gt;Google-Extended&lt;/code&gt; rule on your own site, I'd like to hear what it was doing there.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>PHP2Shell (CVE-2026-109618, CVE-2026-109619): how to check and patch your PHP version</title>
      <dc:creator>Reza Pratama</dc:creator>
      <pubDate>Thu, 22 Oct 2026 20:58:16 +0000</pubDate>
      <link>https://dev.to/rezapratama_serpair/php2shell-cve-2026-109618-cve-2026-109619-how-to-check-and-patch-your-php-version-7fo</link>
      <guid>https://dev.to/rezapratama_serpair/php2shell-cve-2026-109618-cve-2026-109619-how-to-check-and-patch-your-php-version-7fo</guid>
      <description>&lt;p&gt;On 21 Oct 2026 the PHP project shipped fixes for two critical vulnerabilities in the PHP engine, known together as PHP2Shell (&lt;a href="https://www.php.net/archive/2026.php" rel="noopener noreferrer"&gt;php.net&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CVE-2026-109618&lt;/strong&gt;, remote code execution via out-of-memory corruption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CVE-2026-109619&lt;/strong&gt;, remote code execution via stale global state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both can allow unauthenticated remote code execution and both are rated CVSS v4.0 9.2 (&lt;a href="https://www.cve.org/CVERecord?id=CVE-2026-109618" rel="noopener noreferrer"&gt;CVE-2026-109618&lt;/a&gt;, &lt;a href="https://www.cve.org/CVERecord?id=CVE-2026-109619" rel="noopener noreferrer"&gt;CVE-2026-109619&lt;/a&gt;). The flaws are in PHP itself, so updating your framework, theme or plugins does not fix them. As Cloudflare puts it, administrators "need to update the PHP software running their applications" (&lt;a href="https://blog.cloudflare.com/php-vulnerabilities-waf-protection/" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in scope
&lt;/h2&gt;

&lt;p&gt;The PHP project says "all PHP installations serving web requests" are at risk, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. Wiz says every PHP version released in the last decade, back to 5.4, is affected by at least one of the bugs (&lt;a href="https://www.wiz.io/blog/php2shell-php-rce" rel="noopener noreferrer"&gt;Wiz&lt;/a&gt;). Wiz also says frontier AI models helped its researchers find the bugs and turn them into working exploits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixed versions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PHP branch&lt;/th&gt;
&lt;th&gt;Fixed version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8.5&lt;/td&gt;
&lt;td&gt;8.5.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;td&gt;8.4.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.3&lt;/td&gt;
&lt;td&gt;8.3.36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.2&lt;/td&gt;
&lt;td&gt;8.2.35&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is no official PHP2Shell release below 8.2; patch via a vendor backport or upgrade. The PHP security team published minimal source backports for 7.4, 8.0 and 8.1 for people who build from source or have no long-term support vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the runtime that actually serves requests
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hosting dashboard or your host.&lt;/strong&gt; Most panels show the PHP version per site. Ask your host in writing whether the PHP2Shell fix is installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WordPress:&lt;/strong&gt; Tools &amp;gt; Site Health &amp;gt; Info &amp;gt; Server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own site's response headers.&lt;/strong&gt; Some servers send &lt;code&gt;X-Powered-By: PHP/8.x.y&lt;/code&gt;. Many hide it, and a missing header proves nothing either way.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two catches from Qualys. First, the version that &lt;code&gt;php -v&lt;/code&gt; shows on the command line "may belong to a different installation from the one serving web requests". Second, distributions and support vendors that ship their own patched packages may keep an older version number, so check your vendor's advisory rather than the number alone (&lt;a href="https://blog.qualys.com/vulnerabilities-threat-research/2026/10/20/php-announces-critical-security-release-for-two-vulnerabilities" rel="noopener noreferrer"&gt;Qualys&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Don't leave a &lt;code&gt;phpinfo()&lt;/code&gt; page online to check. It shows your server details to anyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mitigations are not a fix
&lt;/h2&gt;

&lt;p&gt;The PHP project says its temporary mitigations reduce some attack paths but "do not make an installation safe". Cloudflare says its PHP2Shell protections are "deployed automatically on all plans with WAF deployed, including Free users", and still tells customers to patch. A WAF buys time while you update. It doesn't replace the update.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploitation status
&lt;/h2&gt;

&lt;p&gt;Amazon Threat Intelligence saw a PHP2Shell exploit attempt dating to 17 Oct 2026, four days before disclosure, and after the patch said "PHP2Shell is now being broadly exploited in the wild" (&lt;a href="https://aws.amazon.com/blogs/security/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot/" rel="noopener noreferrer"&gt;AWS Security Blog&lt;/a&gt;). CISA's alert the same day said "CISA has not observed exploitation of these vulnerabilities as of the time of publication" (&lt;a href="https://www.cisa.gov/news-events/alerts/2026/10/21/critical-vulnerabilities-php-require-immediate-patching" rel="noopener noreferrer"&gt;CISA&lt;/a&gt;). The AWS statement is the more recent picture. AWS also says to start investigations from 17 Oct.&lt;/p&gt;

&lt;h2&gt;
  
  
  On 8.1 or older
&lt;/h2&gt;

&lt;p&gt;PHP 8.1 reached end of life on 31 Dec 2025, PHP 8.0 on 26 Nov 2023 and PHP 7.4 on 28 Nov 2022. CISA says organizations that cannot update immediately, or that continue to use PHP 8.1 or earlier, "should take PHP-based systems offline until they can be patched or updated". PHP 8.2 security support ends on 31 Dec 2026, and 8.3 is supported until 31 Dec 2027, so aim for 8.3 or newer if you're upgrading anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find&lt;/strong&gt; every PHP app and site you run, including staging and anything that bundles PHP (NCSC-NL keeps a list of such products).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check&lt;/strong&gt; the version of the runtime serving requests, not only the CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update&lt;/strong&gt; to 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or get your host or vendor to confirm a patched build in writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firewall&lt;/strong&gt; on while you patch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch.&lt;/strong&gt; Review from 17 Oct, check Search Console's Security issues report, and rotate passwords, tokens and API keys if anything looks off. Wiz showed the flaws can leak "passwords, tokens, and API keys" from server memory.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The SEO part devs tend to skip
&lt;/h2&gt;

&lt;p&gt;Does your SEO tool check your PHP version? Search Console only tells you after you're hacked: its Security issues report shows findings once Google determines a site "was hacked, or that it exhibits behavior that could potentially harm a visitor or their computer". Google's hacked site guide names "an older, insecure version of Drupal, Joomla! or WordPress" as a way in, and a hacked site can get a "This site may be hacked" label, drop out of results and out of AI Overviews.&lt;/p&gt;

&lt;p&gt;I work at Serpair. Our free check checks whether your site advertises a PHP/CMS version affected by PHP2Shell and known CVEs. It's passive and only reads the publicly advertised version, so it sends no attack traffic. "Version hidden / not exposed" is a possible result, and hidden doesn't mean patched. A passive check isn't a full security audit. You get a partial report by work email, then register on Serpair for the full report. Free, no credit card required. Sources and the check are in the original post: &lt;a href="https://serpair.com/blog/php2shell-vulnerability-check-founders/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=php-scan&amp;amp;utm_content=article" rel="noopener noreferrer"&gt;PHP2Shell vulnerability: check if your site is affected&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How did patching go on your stack? Did your distro or host ship a backport, and did &lt;code&gt;php -v&lt;/code&gt; match what your web server was actually running?&lt;/p&gt;

</description>
      <category>php</category>
      <category>security</category>
      <category>wordpress</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Google's new AI agent terms: a Google Workspace hardening checklist for AI agents</title>
      <dc:creator>Reza Pratama</dc:creator>
      <pubDate>Thu, 22 Oct 2026 07:11:33 +0000</pubDate>
      <link>https://dev.to/rezapratama_serpair/googles-new-ai-agent-terms-a-google-workspace-hardening-checklist-for-ai-agents-128l</link>
      <guid>https://dev.to/rezapratama_serpair/googles-new-ai-agent-terms-a-google-workspace-hardening-checklist-for-ai-agents-128l</guid>
      <description>&lt;p&gt;Google sent us a legal notice this month. We're not in trouble: every Google Workspace and Cloud admin got the notice. It covers Google's new AI agent terms, effective 12 Oct 2026, which update the Google Workspace Service Specific Terms and the Google Cloud Terms of Service. The headline is in the Workspace terms: the customer is "solely responsible" for any Agentic AI Action. This is the developer version: what the terms say, then what to actually change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The three clauses that matter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://cloud.google.com/terms" rel="noopener noreferrer"&gt;Cloud terms&lt;/a&gt; 3.3 now restricts using "the Services or any AI Agent ... in violation of the AUP" (the Acceptable Use Policy).&lt;/li&gt;
&lt;li&gt;Cloud terms 13.2: you indemnify Google for "Customer's or an End User's use of the Services or AI Agents in breach of the AUP or Section 3.3 (Restrictions)".&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://workspace.google.com/terms/service-terms/" rel="noopener noreferrer"&gt;Workspace terms&lt;/a&gt; 13.3: "Customer is solely responsible for: (i) any Agentic AI Action", and 13.3(b) adds "Customer is solely responsible for any liability arising from disabling or bypassing any of these safeguards" (the human confirmation safeguards).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Combine 3.3 with Cloud terms 4.2, which says Google "may immediately Suspend" if "Customer is in breach of Section 3.3 (Restrictions)", and the practical risk is clear: a misbehaving agent can get the account suspended. Google's &lt;a href="https://support.google.com/accounts/answer/40695" rel="noopener noreferrer"&gt;account help page&lt;/a&gt; says it directly: "Violations may result from instructions you give to an AI agent."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 5 guardrails&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List your agents.&lt;/strong&gt; Inventory OAuth grants. Personal accounts: Google Account &amp;gt; Security &amp;gt; third-party connections. Workspace: Admin console &amp;gt; Security &amp;gt; Access and data control &amp;gt; API controls, then review and restrict third-party app access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-only access.&lt;/strong&gt; Use read-only Gmail and Drive scopes for agents that summarize or search. Grant send or delete only to a flow that has a human approval step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A human approves sends.&lt;/strong&gt; If a tool asks for human confirmation, keep it on. SST 13.3(b) puts bypass liability on you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A separate account.&lt;/strong&gt; Give agents their own properly licensed account or service account, not the founder's admin account. The &lt;a href="https://cloud.google.com/terms/agentic-ai-use-guidelines" rel="noopener noreferrer"&gt;agent guidelines&lt;/a&gt; prohibit "obfuscating or misrepresenting agent identity". Don't use it to share files around Workspace limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A spending cap.&lt;/strong&gt; Budget caps and billing alerts. The agent guidelines: "you remain liable for any charges accrued by your agents."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Also worth doing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log every external action: timestamp, tool, target, approver. An append-only file or table is enough.&lt;/li&gt;
&lt;li&gt;Rate-limit outbound email and posting in code, not in the prompt. "Spam, phishing, or malware" is on the &lt;a href="https://policies.google.com/terms/generative-ai/use-policy" rel="noopener noreferrer"&gt;Generative AI Prohibited Use Policy&lt;/a&gt; list.&lt;/li&gt;
&lt;li&gt;Treat fetched web content as untrusted input. Prompt injection is a real risk for any agent that browses.&lt;/li&gt;
&lt;li&gt;Don't use agents to multiply accounts. "Creating or managing numerous accounts to evade detection" is on the agent guidelines' prohibited list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not legal advice. Read the terms for your own setup.&lt;/p&gt;

&lt;p&gt;The flip side: AI is also how people find your product now. Developers and buyers ask ChatGPT or read Google AI Overviews, so AI visibility in AI search is worth tracking too. That's what I work on at Serpair.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://serpair.com/blog/google-legal-notice-ai-agents-founders/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=google-notice&amp;amp;utm_content=article" rel="noopener noreferrer"&gt;Originally published on Serpair&lt;/a&gt;: Google's new AI agent terms, explained.&lt;/p&gt;

&lt;p&gt;How are you using AI in your business right now? Did Google notify you too? Have you changed anything since, and what guardrails do you have in place? Drop your setup in the comments and I'll fold the best ideas into this checklist.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>google</category>
      <category>startup</category>
    </item>
    <item>
      <title>Your Friends Have All Signed Up. Now What? A Findability Checklist for Builders</title>
      <dc:creator>Reza Pratama</dc:creator>
      <pubDate>Sat, 17 Oct 2026 09:50:11 +0000</pubDate>
      <link>https://dev.to/rezapratama_serpair/your-friends-have-all-signed-up-now-what-a-findability-checklist-for-builders-25go</link>
      <guid>https://dev.to/rezapratama_serpair/your-friends-have-all-signed-up-now-what-a-findability-checklist-for-builders-25go</guid>
      <description>&lt;p&gt;Once your friends have all signed up, the next users have to find you on their own, and that mostly happens through Google and AI assistants. This checklist covers the technical side of being findable, in the order I'd do it. I'm Reza from the Serpair team, and this is the list we'd have wanted after our own launch.&lt;/p&gt;

&lt;p&gt;Some context first. Serpair started because the team launched a startup and Google didn't rank it. Most founders hit some version of that wall, and YC's Ankit Gupta describes the fix well in &lt;a href="https://www.ycombinator.com/library/ND-how-to-get-your-first-users" rel="noopener noreferrer"&gt;How To Get Your First Users&lt;/a&gt;: "Finding your first users is more of a search problem than a persuasion problem." So treat findability like any other bug and work through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Rank for your own name
&lt;/h2&gt;

&lt;p&gt;If someone hears about your product and searches its name, you should come up first. Plenty of new products don't, especially when the name is a common word or another company already uses it.&lt;/p&gt;

&lt;p&gt;Check it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search your product name in a private window. Then search the name plus your category, like "acme invoicing".&lt;/li&gt;
&lt;li&gt;Verify your site in &lt;a href="https://search.google.com/search-console" rel="noopener noreferrer"&gt;Google Search Console&lt;/a&gt; and use URL Inspection on your home page to confirm it's indexed.&lt;/li&gt;
&lt;li&gt;Search your name in ChatGPT, Perplexity and Gemini and see what they think you are.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fix it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put the name and the category together in your home page title and first heading. "Acme: invoicing for freelancers" beats "Acme" on its own.&lt;/li&gt;
&lt;li&gt;Use exactly the same name everywhere: site, social profiles, launch listings and GitHub.&lt;/li&gt;
&lt;li&gt;Tell Google your preferred site name with &lt;code&gt;WebSite&lt;/code&gt; structured data on the home page. Google says this markup is "most important" if you want to state a preference, and you can add an &lt;code&gt;alternateName&lt;/code&gt; as a fallback (&lt;a href="https://developers.google.com/search/docs/appearance/site-names" rel="noopener noreferrer"&gt;Google docs&lt;/a&gt;).
&lt;/li&gt;
&lt;/ul&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;WebSite&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;Acme&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;alternateName&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;Acme Invoicing&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;acme.com&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;url&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://acme.com/&lt;/span&gt;&lt;span class="dl"&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;h2&gt;
  
  
  2. Add Organization structured data, and keep expectations honest
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Organization&lt;/code&gt; markup helps Google "disambiguate your organization in search results," which matters when other things share your name (&lt;a href="https://developers.google.com/search/docs/appearance/structured-data/organization" rel="noopener noreferrer"&gt;Google docs&lt;/a&gt;). The &lt;code&gt;sameAs&lt;/code&gt; property links your official profiles so the pieces connect.&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;Organization&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;Acme&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;url&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://acme.com&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;logo&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://acme.com/logo.png&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;description&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;Invoicing for freelancers.&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;sameAs&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;https://x.com/acmehq&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://github.com/acmehq&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://www.linkedin.com/company/acmehq&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;Check every &lt;code&gt;sameAs&lt;/code&gt; URL by hand. A typo in a handle points Google at someone else.&lt;/p&gt;

&lt;p&gt;Now the honest part. Schema is not a shortcut to AI citations. Ahrefs &lt;a href="https://ahrefs.com/blog/schema-ai-citations/" rel="noopener noreferrer"&gt;tracked 1,885 pages&lt;/a&gt; that added JSON-LD and found no meaningful lift in citations from Google AI Mode or ChatGPT. Those pages were already heavily cited, so the result says less about brand-new sites. Google also says there's "no special schema.org structured data" needed for its AI features, and that structured data should match the visible text (&lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;Google docs&lt;/a&gt;). Add schema so Google understands who you are, then put the facts that matter in plain visible text.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Let the AI crawlers in
&lt;/h2&gt;

&lt;p&gt;AI assistants can only cite pages their crawlers can reach. Each company documents its own bots:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAI-SearchBot&lt;/strong&gt; powers ChatGPT search. OpenAI says sites that opt out "will not be shown in ChatGPT search answers" (&lt;a href="https://platform.openai.com/docs/bots" rel="noopener noreferrer"&gt;OpenAI docs&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPTBot&lt;/strong&gt; is OpenAI's training crawler. It's a separate setting, so you can block training and still allow search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PerplexityBot&lt;/strong&gt; surfaces and links sites in Perplexity results (&lt;a href="https://docs.perplexity.ai/guides/bots" rel="noopener noreferrer"&gt;Perplexity docs&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Googlebot&lt;/strong&gt; covers Google Search, including AI Overviews and AI Mode. Google says robots.txt rules for Googlebot are the control for those features (&lt;a href="https://developers.google.com/search/docs/appearance/ai-features" rel="noopener noreferrer"&gt;Google docs&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A minimal robots.txt that welcomes search crawlers:&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: *
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

Sitemap: https://acme.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then check your CDN or firewall, because robots.txt isn't the only gate. Google lists CDN and hosting settings as something to check, and Perplexity's docs include rules for allowing its bots through Cloudflare and AWS WAF. A quick smoke test from your terminal, using a shortened version of the user agent OpenAI documents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s2"&gt;"Mozilla/5.0 (compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot)"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://acme.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A 403 or a challenge page means something is blocking the bot. Some firewalls also check the real IP ranges, which OpenAI and Perplexity publish, so treat a 200 here as a good sign rather than proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Write one page that answers the problem
&lt;/h2&gt;

&lt;p&gt;Crawlable isn't the same as useful. AI search tools often run several related searches for one question. Google calls this "query fan-out." Then they pull passages from pages that answer a specific part of the question clearly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick the exact problem your product solves, in your users' words. Look at how they describe it on Reddit, Hacker News or in support emails.&lt;/li&gt;
&lt;li&gt;Write one page that answers it in the first two or three sentences, then explains the details.&lt;/li&gt;
&lt;li&gt;Keep the important content in HTML text, not only in images, videos or client-side widgets.&lt;/li&gt;
&lt;li&gt;Add a short FAQ with the follow-up questions people actually ask.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Get mentioned where answers come from
&lt;/h2&gt;

&lt;p&gt;AI answers lean on sources the web already trusts. Pew &lt;a href="https://www.pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/" rel="noopener noreferrer"&gt;found&lt;/a&gt; that Wikipedia, YouTube and Reddit were the three most cited sources in Google's AI summaries. You can't buy your way into those, but you can show up honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List your product on relevant directories and launch sites with the same name and one-line description.&lt;/li&gt;
&lt;li&gt;Answer real questions in communities where your users ask them, and mention your product only when it actually helps.&lt;/li&gt;
&lt;li&gt;Write comparison or "how to" posts on platforms like this one, with a link back to your site.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Measure, then repeat
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In GA4 or your analytics tool, look for referrers like &lt;code&gt;chatgpt.com&lt;/code&gt;, &lt;code&gt;perplexity.ai&lt;/code&gt; and &lt;code&gt;gemini.google.com&lt;/code&gt;. Some AI visits arrive with no referrer and land in direct traffic, so the count is a floor.&lt;/li&gt;
&lt;li&gt;In Search Console, watch impressions for your brand name and your problem queries.&lt;/li&gt;
&lt;li&gt;Re-ask the same prompts every couple of weeks. SparkToro &lt;a href="https://sparktoro.com/blog/new-research-ais-are-highly-inconsistent-when-recommending-brands-or-products-marketers-should-take-care-when-tracking-ai-visibility/" rel="noopener noreferrer"&gt;found&lt;/a&gt; that AI tools give the same list of brands less than 1 in 100 times. Track how often you appear across many runs, not where you rank in a single answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'd rather not do step 6 by hand, &lt;a href="https://serpair.com" rel="noopener noreferrer"&gt;Serpair&lt;/a&gt; tracks your Google rankings and whether ChatGPT, Perplexity and Gemini mention you, then turns it into a short list of fixes. It's free to start.&lt;/p&gt;

&lt;p&gt;Your friends got you to launch. This checklist helps the next people find you.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to check whether AI assistants cite your site (a developer's workflow)</title>
      <dc:creator>Reza Pratama</dc:creator>
      <pubDate>Fri, 16 Oct 2026 13:16:22 +0000</pubDate>
      <link>https://dev.to/rezapratama_serpair/how-to-check-whether-ai-assistants-cite-your-site-a-developers-workflow-2nib</link>
      <guid>https://dev.to/rezapratama_serpair/how-to-check-whether-ai-assistants-cite-your-site-a-developers-workflow-2nib</guid>
      <description>&lt;p&gt;Search traffic used to mean one thing: Google results. Now a growing share of questions go to AI assistants like ChatGPT, Perplexity and Gemini. If you ship a product or docs site, it's worth knowing whether those assistants mention you.&lt;/p&gt;

&lt;p&gt;This post walks through a simple, repeatable way to check. It needs a spreadsheet, a bit of discipline and, optionally, a small script.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Write prompts the way users ask
&lt;/h2&gt;

&lt;p&gt;Don't test with your brand name. Test with the problems your users have.&lt;/p&gt;

&lt;p&gt;Good sources for prompts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Questions from support tickets and onboarding calls.&lt;/li&gt;
&lt;li&gt;Queries in Google Search Console's Performance report.&lt;/li&gt;
&lt;li&gt;"People also ask" boxes on Google for your main topics.&lt;/li&gt;
&lt;li&gt;Threads on Reddit, Stack Overflow or GitHub Discussions in your niche.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aim for 10 to 20 prompts. Mix broad ones ("best tool to monitor cron jobs") with specific ones ("how do I alert on a missed cron run in Node").&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Set up a tracking sheet
&lt;/h2&gt;

&lt;p&gt;Use one row per prompt per assistant per check. These columns are enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csvs"&gt;&lt;code&gt;&lt;span class="k"&gt;date&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;assistant&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;prompt&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;brand&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;mentioned&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;y&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="k"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;our&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;url&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;cited&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;y&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="k"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;cited&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;urls&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;competitors&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;named&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;notes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Record the cited URLs, not only whether you appeared. The list of cited domains is the most useful part. It shows which pages assistants trust for your topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Run the checks consistently
&lt;/h2&gt;

&lt;p&gt;AI answers vary between runs, accounts and locations. You can't remove that noise, but you can keep it steady.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a fresh or logged-out session where possible.&lt;/li&gt;
&lt;li&gt;Use the same wording every time.&lt;/li&gt;
&lt;li&gt;Run each prompt twice and note if the answers differ.&lt;/li&gt;
&lt;li&gt;Repeat the full set every two weeks, not every day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assistants that browse the web, like Perplexity, show sources directly. For others, ask a follow-up such as "which sources did you use?" and note what you get.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Optional: script part of it
&lt;/h2&gt;

&lt;p&gt;If an assistant offers an API, you can loop over your prompts and save the raw answers. API answers can differ from the consumer chat apps, so treat them as a signal, not ground truth.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_urls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https?://[^\s)\]]+&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;assistant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_urls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="n"&gt;assistant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;y&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;y&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# answers = {prompt: call_your_assistant_api(prompt) for prompt in prompts}
# with open("ai-checks.csv", "a", newline="") as f:
#     w = csv.writer(f)
#     for p, a in answers.items():
#         log_answer(w, "assistant-name", p, a, "YourBrand", "yourdomain.com")
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Read the results like a developer
&lt;/h2&gt;

&lt;p&gt;Look for patterns, not single answers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cited, not named:&lt;/strong&gt; your page is used but your brand isn't stated. Put your product name near the answer on the page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Named, not cited:&lt;/strong&gt; assistants know you from elsewhere, like directories or reviews. Make sure those third-party pages are accurate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitors cited instead:&lt;/strong&gt; open their cited pages. Note how they structure the answer, and where it sits on the page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nobody cited:&lt;/strong&gt; the topic may be open. A clear, focused page could fill it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Fix what you can control
&lt;/h2&gt;

&lt;p&gt;Most fixes are ordinary web hygiene:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put a direct one or two sentence answer under each question-style heading.&lt;/li&gt;
&lt;li&gt;Make sure pages render meaningful HTML without needing client-side JavaScript.&lt;/li&gt;
&lt;li&gt;Don't block search and AI crawlers in robots.txt by accident.&lt;/li&gt;
&lt;li&gt;Add structured data that matches visible content, such as &lt;code&gt;Organization&lt;/code&gt;, &lt;code&gt;SoftwareApplication&lt;/code&gt; or &lt;code&gt;FAQPage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keep pricing and feature facts consistent across your site and listings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;A small, steady checking habit beats guessing. Twenty prompts, a sheet and a fortnightly rerun will show you more than any single screenshot.&lt;/p&gt;

&lt;p&gt;I work on &lt;a href="https://serpair.com" rel="noopener noreferrer"&gt;Serpair&lt;/a&gt;, which runs this kind of Google and AI-answer tracking for you. But the manual method above works fine on its own, and it's a good place to start.&lt;/p&gt;

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