<?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: Kenichi Uchiumi</title>
    <description>The latest articles on DEV Community by Kenichi Uchiumi (@ken_deba90e14).</description>
    <link>https://dev.to/ken_deba90e14</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%2F4004198%2F65d46765-27a6-49d6-810e-92fd31e676a4.png</url>
      <title>DEV Community: Kenichi Uchiumi</title>
      <link>https://dev.to/ken_deba90e14</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ken_deba90e14"/>
    <language>en</language>
    <item>
      <title>Your analytics dashboard is blind to most AI traffic. Here's how I fixed mine.</title>
      <dc:creator>Kenichi Uchiumi</dc:creator>
      <pubDate>Fri, 26 Jun 2026 15:05:06 +0000</pubDate>
      <link>https://dev.to/ken_deba90e14/your-analytics-dashboard-is-blind-to-most-ai-traffic-heres-how-i-fixed-mine-22i7</link>
      <guid>https://dev.to/ken_deba90e14/your-analytics-dashboard-is-blind-to-most-ai-traffic-heres-how-i-fixed-mine-22i7</guid>
      <description>&lt;p&gt;A few weeks ago I went digging through raw server logs on a WordPress&lt;br&gt;
site I run, out of simple curiosity about how often AI crawlers —&lt;br&gt;
GPTBot, ClaudeBot, Perplexity, and friends — were actually visiting.&lt;/p&gt;

&lt;p&gt;The number I found didn't match GA4 at all. Not even close.&lt;/p&gt;
&lt;h2&gt;
  
  
  The blind spot
&lt;/h2&gt;

&lt;p&gt;GA4 (and most JS-based analytics) works by firing an event from&lt;br&gt;
client-side JavaScript when a page loads in a browser. That's a&lt;br&gt;
reasonable assumption when your visitors are humans with browsers.&lt;/p&gt;

&lt;p&gt;It's a bad assumption when an increasing share of your traffic is&lt;br&gt;
AI agents fetching pages via HTTP to read, summarize, or train on&lt;br&gt;
your content. Most of these agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't execute JavaScript&lt;/li&gt;
&lt;li&gt;Don't render the DOM&lt;/li&gt;
&lt;li&gt;Just request the HTML and parse it server-side
Which means: GA4 never sees them. Not "undercounts them" — &lt;em&gt;never
sees them at all&lt;/em&gt;, structurally, by design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I cross-checked GA4's pageview count against my raw access&lt;br&gt;
logs filtered for known AI user-agents, the gap was roughly &lt;strong&gt;9x&lt;/strong&gt;.&lt;br&gt;
Nine times more AI bot requests than GA4 reported as traffic of any&lt;br&gt;
kind. That's not a rounding error — that's an entire category of&lt;br&gt;
visitor your dashboard doesn't know exists.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why this matters more every month
&lt;/h2&gt;

&lt;p&gt;As more search behavior shifts toward AI Overviews, AI Mode, and&lt;br&gt;
conversational assistants doing the browsing on a user's behalf, the&lt;br&gt;
traffic GA4 &lt;em&gt;can&lt;/em&gt; see is shrinking as a proportion of total&lt;br&gt;
attention your content receives. You can be making real progress&lt;br&gt;
with the systems generating zero-click answers — and your analytics&lt;br&gt;
will tell you nothing changed.&lt;/p&gt;

&lt;p&gt;If you can't see it, you can't optimize for it. You're flying half-blind.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/edgeshaping-lite/" rel="noopener noreferrer"&gt;EdgeShaping Lite&lt;/a&gt;is a small, free WordPress plugin that observes AI bot traffic at&lt;br&gt;
the PHP layer instead of the JavaScript layer. No JS dependency, no&lt;br&gt;
reliance on the bot executing anything — it just logs the request&lt;br&gt;
when it matches a dictionary of known AI crawler user-agents.&lt;/p&gt;

&lt;p&gt;Core design constraints I held myself to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It doesn't block anything.&lt;/strong&gt; This is an observation tool, not a
firewall. Blocking AI crawlers is a different (valid) problem with
different tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It doesn't modify content.&lt;/strong&gt; No injected markup, no cloaking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No data leaves the site.&lt;/strong&gt; Everything stays in the WordPress
database. No third-party telemetry.
Install it, activate it, and you immediately get a dashboard: which
bots, which pages, how often, when.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The more interesting part: the AHQG Matrix
&lt;/h2&gt;

&lt;p&gt;Knowing &lt;em&gt;that&lt;/em&gt; AI reads your pages is useful. Knowing &lt;em&gt;which&lt;/em&gt; pages&lt;br&gt;
AI reads relative to which pages humans actually find through search&lt;br&gt;
is more useful — because the mismatch between those two signals is&lt;br&gt;
where the actionable insight lives.&lt;/p&gt;

&lt;p&gt;That's what the AHQG Matrix does (patent application filed on the&lt;br&gt;
underlying method). It's a simple idea executed as a 2x2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    High human search clicks
                            |
   STANDARD                 |              ALIGNED
   (humans find it,         |        (both AI and humans
    AI mostly ignores it)   |         find it — healthy state)
                            |
   ---------------------------------------------------- High AI bot visits
                            |
   INCUBATION               |          LATENT GAP
   (neither finds it yet)   |    (AI already reads it heavily,
                            |     humans haven't discovered it yet)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The quadrant that matters most in practice is &lt;strong&gt;LATENT GAP&lt;/strong&gt;: pages&lt;br&gt;
AI is already crawling frequently — meaning some AI system has&lt;br&gt;
judged them worth reading and probably worth citing — that haven't&lt;br&gt;
yet translated into human search visibility. These are early signals&lt;br&gt;
worth acting on before they show up anywhere else in your funnel&lt;br&gt;
metrics.&lt;/p&gt;

&lt;p&gt;Implementation-wise, the matrix needs two data sources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI bot visit counts per page (from EdgeShaping's own observation log)&lt;/li&gt;
&lt;li&gt;Human search click counts per page (from the Search Console API)
It plots every page on those two axes, splits the distribution at a
computed threshold per axis, and buckets pages into the four
quadrants. The Google Search Console integration is optional — without
it, you still get the raw AI traffic ranking, just not the
cross-reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's also a secondary signal I didn't expect to find useful until&lt;br&gt;
I built it: pages that get AI traffic but aren't in your sitemap at&lt;br&gt;
all (an "inferred path" — AI found a route to a page your own site&lt;br&gt;
architecture doesn't formally declare), and the inverse — pages in&lt;br&gt;
your sitemap that neither AI nor humans ever reach (a genuine dead&lt;br&gt;
end, observable for the first time).&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;Two honest lessons from shipping this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OAuth is a bad default for a free tier.&lt;/strong&gt; The original GSC&lt;br&gt;
integration required users to create a Google Cloud project and an&lt;br&gt;
OAuth client just to unlock the matrix view. For a plugin aimed at&lt;br&gt;
WordPress site owners — not necessarily developers — that's a steep&lt;br&gt;
ask, and it shows in support friction. I'm moving the free tier to a&lt;br&gt;
simpler CSV-import flow and reserving live OAuth sync for the paid&lt;br&gt;
edition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Localization infrastructure has more layers than you'd guess.&lt;/strong&gt;&lt;br&gt;
WordPress.org's plugin UI strings and the plugin's &lt;em&gt;directory&lt;br&gt;
listing page&lt;/em&gt; (the readme) are translated through completely&lt;br&gt;
separate systems. I had the in-plugin UI fully localized into&lt;br&gt;
Japanese while the public-facing listing page was silently still in&lt;br&gt;
English — for over a week, with zero indication anything was wrong,&lt;br&gt;
quietly costing conversions from non-English-speaking visitors who&lt;br&gt;
landed on the page and bounced. If you're shipping a plugin for a&lt;br&gt;
non-English-primary audience, check both translation projects&lt;br&gt;
independently; don't assume one implies the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Free, open on the WordPress.org directory:&lt;br&gt;
&lt;a href="https://wordpress.org/plugins/edgeshaping-lite/" rel="noopener noreferrer"&gt;https://wordpress.org/plugins/edgeshaping-lite/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you run a non-trivial amount of content and haven't checked your&lt;br&gt;
raw logs for AI crawler traffic recently, I'd genuinely be curious&lt;br&gt;
what gap you find. Mine was 9x. I don't think that's an outlier.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>analytics</category>
      <category>webscraping</category>
    </item>
  </channel>
</rss>
