{"id":321955,"date":"2026-06-04T10:08:47","date_gmt":"2026-06-04T10:08:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/geo-metrics-ai-traffic-monitor\/"},"modified":"2026-06-04T10:08:15","modified_gmt":"2026-06-04T10:08:15","slug":"geo-metrics-ai-traffic-monitor","status":"publish","type":"plugin","link":"https:\/\/id.wordpress.org\/plugins\/geo-metrics-ai-traffic-monitor\/","author":23510752,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.4.2","stable_tag":"2.4.2","tested":"7.0.2","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"GEO Metrics AI Traffic Monitor","header_author":"Human Trends","header_description":"Monitor AI bot traffic on your WordPress site. Detects 40+ LLM crawlers and agents (ChatGPT, Claude, Gemini, Perplexity\u2026). No external HTTP requests \u2014 reads only local server log files.","assets_banners_color":"","last_updated":"2026-06-04 10:08:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/trygeometrics.com","header_author_uri":"https:\/\/humantrends.es","rating":0,"author_block_rating":0,"active_installs":40,"downloads":201,"num_ratings":0,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.4.2":{"tag":"2.4.2","author":"abignu","date":"2026-06-04 10:08:15"}},"upgrade_notice":{"2.4.0":"<p>Recommended update. Removes the 500-line read cap that caused incomplete data on the initial dashboard load. Existing transient data is used automatically \u2014 no manual sync required after upgrading.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3560697,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3560697,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.4.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3573238,"resolution":"1","location":"assets","locale":"","width":1631,"height":703},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3573238,"resolution":"2","location":"assets","locale":"","width":1631,"height":873},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3573238,"resolution":"3","location":"assets","locale":"","width":1631,"height":873},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3573238,"resolution":"4","location":"assets","locale":"","width":1631,"height":873}},"screenshots":{"1":"<strong>Dashboard<\/strong> \u2014 KPI cards, per-bot daily trend chart, and bot-share donut chart.","2":"<strong>Bot Details<\/strong> \u2014 per-bot breakdown with company, type, page-level stats, and HTTP status distribution.","3":"<strong>Log Viewer<\/strong> \u2014 raw log lines with type\/severity badges and live refresh.","4":"<strong>Settings<\/strong> \u2014 log source configuration, sync interval, and retention settings."}},"plugin_section":[],"plugin_tags":[2353,22770,226124,1955,5603],"plugin_category":[54],"plugin_contributors":[265787],"plugin_business_model":[],"class_list":["post-321955","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-bot-detection","plugin_tags-llm","plugin_tags-logs","plugin_tags-monitoring","plugin_category-security-and-spam-protection","plugin_contributors-abignu","plugin_committers-abignu"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/geo-metrics-ai-traffic-monitor\/assets\/icon-128x128.png?rev=3560697","icon_2x":"https:\/\/ps.w.org\/geo-metrics-ai-traffic-monitor\/assets\/icon-256x256.png?rev=3560697","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/geo-metrics-ai-traffic-monitor\/assets\/screenshot-1.png?rev=3573238","caption":"<strong>Dashboard<\/strong> \u2014 KPI cards, per-bot daily trend chart, and bot-share donut chart."},{"src":"https:\/\/ps.w.org\/geo-metrics-ai-traffic-monitor\/assets\/screenshot-2.png?rev=3573238","caption":"<strong>Bot Details<\/strong> \u2014 per-bot breakdown with company, type, page-level stats, and HTTP status distribution."},{"src":"https:\/\/ps.w.org\/geo-metrics-ai-traffic-monitor\/assets\/screenshot-3.png?rev=3573238","caption":"<strong>Log Viewer<\/strong> \u2014 raw log lines with type\/severity badges and live refresh."},{"src":"https:\/\/ps.w.org\/geo-metrics-ai-traffic-monitor\/assets\/screenshot-4.png?rev=3573238","caption":"<strong>Settings<\/strong> \u2014 log source configuration, sync interval, and retention settings."}],"raw_content":"<!--section=description-->\n<p><strong>GEO Metrics AI Traffic Monitor<\/strong> turns your raw server and WordPress logs into actionable intelligence about AI bot traffic. In a world where ChatGPT, Claude, Gemini, and Perplexity crawl billions of pages to power their answers, knowing whether those bots visit <em>your<\/em> site \u2014 and what they read \u2014 is a new SEO frontier.<\/p>\n\n<p>The plugin works out of the box with zero configuration. It reads your existing <code>debug.log<\/code>, access logs, and PHP error logs, identifies AI crawlers by their User-Agent string, and displays a clean analytics dashboard inside your WordPress admin.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li><strong>AI Bot Dashboard<\/strong> \u2014 KPI cards for total requests, AI bot visits, distinct bots detected, and the active date range. Visual trend chart broken down per bot per day. Donut chart of bot share.<\/li>\n<li><strong>Bot Details tab<\/strong> \u2014 per-bot breakdown with company grouping (OpenAI, Anthropic, Google, Meta\u2026), bot type (crawler \/ agent \/ search \/ researcher), top pages visited, and HTTP status distribution.<\/li>\n<li><strong>Log Viewer tab<\/strong> \u2014 raw log lines with syntax highlighting, live refresh via AJAX, and per-event type\/severity filtering.<\/li>\n<li><strong>Live Traffic capture<\/strong> \u2014 the plugin writes its own <code>live.log<\/code> (no server log access needed), capturing every frontend, REST API, and AJAX request in Combined Log Format, with automatic 5 MB rotation.<\/li>\n<li><strong>Date range filter<\/strong> \u2014 filter all dashboard data by custom date range or quick presets (Last 7 days, Last 30 days, etc.).<\/li>\n<li><strong>WP-Cron sync<\/strong> \u2014 automatic parsing on a configurable schedule (Hourly \/ Every 6 hours \/ Twice daily \/ Daily).<\/li>\n<li><strong>Data retention<\/strong> \u2014 configurable retention period (default 30 days) with automatic purge.<\/li>\n<li><strong>Proxy-aware IP detection<\/strong> \u2014 optional trust of <code>X-Forwarded-For<\/code> \/ <code>CF-Connecting-IP<\/code> headers for sites behind Cloudflare or a reverse proxy.<\/li>\n<li><strong>GEO Metrics<\/strong> \u2014 visit <a href=\"https:\/\/trygeometrics.com\">trygeometrics.com<\/a> for cross-site AI traffic aggregation and visibility scoring across your entire brand.<\/li>\n<\/ul>\n\n<h4>Detected bots (40+)<\/h4>\n\n<p>Organized by company:<\/p>\n\n<ul>\n<li><strong>OpenAI<\/strong> \u2014 GPTBot, ChatGPT-User, OAI-SearchBot, OAI-AdsBot<\/li>\n<li><strong>Anthropic<\/strong> \u2014 ClaudeBot, Claude-Web, Claude-User, Claude-SearchBot, anthropic-ai<\/li>\n<li><strong>Google<\/strong> \u2014 Googlebot, Google-Extended, Gemini, Google-Agent, Google-CloudVertexBot, GoogleOther, Google-NotebookLM<\/li>\n<li><strong>Microsoft<\/strong> \u2014 bingbot<\/li>\n<li><strong>Perplexity<\/strong> \u2014 PerplexityBot, Perplexity-User, DuckAssistBot<\/li>\n<li><strong>Meta<\/strong> \u2014 Meta-ExternalAgent, Meta-ExternalFetcher, Meta-WebIndexer<\/li>\n<li><strong>xAI<\/strong> \u2014 GrokBot<\/li>\n<li><strong>Mistral AI<\/strong> \u2014 MistralAI-User<\/li>\n<li><strong>ByteDance<\/strong> \u2014 Bytespider, TikTokSpider<\/li>\n<li><strong>Apple<\/strong> \u2014 Applebot<\/li>\n<li><strong>Amazon<\/strong> \u2014 Amazonbot<\/li>\n<li><strong>Cohere<\/strong> \u2014 cohere-ai<\/li>\n<li><strong>You.com<\/strong> \u2014 YouBot<\/li>\n<li><strong>DuckDuckGo<\/strong> \u2014 DuckDuckBot<\/li>\n<li><strong>Common Crawl \/ Research<\/strong> \u2014 CCBot, AI2Bot<\/li>\n<li><strong>SEO tools<\/strong> \u2014 AhrefsBot, AhrefsSiteAudit, SemrushBot, DotBot, Barkrowler, DataForSeoBot, ScreamingFrog<\/li>\n<li><strong>Other search engines<\/strong> \u2014 BaiduSpider, Yandexbot, Naverbot, ShapBot<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin reads log files already stored on your server. It does <strong>not<\/strong> set cookies, collect personal data from visitors, or make any external HTTP requests. Raw log lines are never stored in the WordPress database \u2014 only aggregated counts and parsed metadata are persisted.<\/p>\n\n<h4>Source log support<\/h4>\n\n<ul>\n<li>WordPress <code>debug.log<\/code> (WP_DEBUG_LOG)<\/li>\n<li>PHP <code>error_log<\/code> (auto-detected from <code>php.ini<\/code>)<\/li>\n<li>Plugin-owned live traffic log (zero-config, works on any host)<\/li>\n<li>Web server access log (optional path in Settings)<\/li>\n<li>Up to 3 custom log paths<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>geo-metrics-logs<\/code> directory to <code>\/wp-content\/plugins\/<\/code>, or install via the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Go to <strong>GEO AI Monitor<\/strong> in the left admin menu.<\/li>\n<li><em>(Optional)<\/em> In the <strong>Settings<\/strong> tab, enter the path to your web server access log and any custom log paths.<\/li>\n<li>Click <strong>Manual Sync<\/strong> to parse logs immediately, or wait for the next WP-Cron run.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"i%20don%27t%20have%20access%20to%20my%20server%27s%20access%20log.%20can%20i%20still%20detect%20bots%3F\"><h3>I don't have access to my server's access log. Can I still detect bots?<\/h3><\/dt>\n<dd><p>Yes. The plugin's built-in Live Traffic Monitor captures every request through WordPress's hook system and writes its own Combined Log Format file inside <code>wp-content\/uploads\/geo-metrics-logs\/<\/code>. No server log access or WP_DEBUG configuration is required.<\/p><\/dd>\n<dt id=\"how%20much%20memory%20does%20reading%20large%20log%20files%20use%3F\"><h3>How much memory does reading large log files use?<\/h3><\/dt>\n<dd><p>Log files are read using <code>SplFileObject<\/code> which streams lines without loading the entire file into memory. By default all available lines are read. If you have very large log files (hundreds of MB), you can set a <strong>Lines per Source<\/strong> limit in Settings to cap how many lines are parsed per sync.<\/p><\/dd>\n<dt id=\"where%20is%20the%20parsed%20data%20stored%3F\"><h3>Where is the parsed data stored?<\/h3><\/dt>\n<dd><p>Aggregated counts and bot lists are stored in WordPress options. Raw parsed events are cached in a WordPress transient with a 6-hour TTL. Raw log file content is never written to the database.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20with%20cloudflare%3F\"><h3>Can I use this with Cloudflare?<\/h3><\/dt>\n<dd><p>Yes. Enable <strong>Trust Proxy Headers<\/strong> in Settings to use <code>CF-Connecting-IP<\/code> (or <code>X-Forwarded-For<\/code>) for correct visitor IP detection. Only enable this if your site is actually behind a trusted proxy.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20the%20access%20log%20path%20on%20cpanel%20%2F%20shared%20hosting%3F\"><h3>How do I set the access log path on cPanel \/ shared hosting?<\/h3><\/dt>\n<dd><p>Common paths are <code>\/home\/username\/logs\/access.log<\/code> or <code>\/var\/log\/apache2\/access.log<\/code>. Contact your host if unsure. The Settings page shows a <strong>Readable<\/strong> \/ <strong>Not readable<\/strong> indicator after you save the path.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20slow%20down%20my%20site%3F\"><h3>Does the plugin slow down my site?<\/h3><\/dt>\n<dd><p>The Live Traffic Monitor hook fires at <code>template_redirect<\/code> (priority 99) and writes a single line to disk \u2014 negligible overhead. Log parsing runs on WP-Cron, not on page load.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.4.2<\/h4>\n\n<ul>\n<li>Moved live monitor log storage from wp-content\/ to the uploads directory (wp_upload_dir()).<\/li>\n<li>Chart data now injected via wp_add_inline_script() instead of a raw  tag.<\/li>\n<li>Updated bundled Chart.js from 4.4.4 to 4.5.1.<\/li>\n<li>Fixed plugin header description to accurately reflect that no external HTTP requests are made.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>Per-bot daily chart: the trend line chart now shows a separate colored line for each detected bot.<\/li>\n<li>Removed 500-line read cap \u2014 plugin now reads all available log lines by default (configurable limit for memory-constrained environments).<\/li>\n<li>Purple top-accent border applied to all KPI stat cards for visual consistency.<\/li>\n<li>Admin menu icon uses native WordPress dashicon rendering.<\/li>\n<li>Lazy-populate fallback: <code>daily_bot_counts<\/code> option is rebuilt from the transient cache on first load after upgrade, so the chart is populated immediately without waiting for the next sync.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Added date-range filter bar with quick presets (Last 7 \/ 30 days, This month).<\/li>\n<li>Dashboard data updates via AJAX without page reload when a date filter is applied.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Bot Details tab: per-bot pages visited table, HTTP status badge distribution.<\/li>\n<li>Bot type classification (crawler \/ agent \/ search \/ researcher) with color-coded badges.<\/li>\n<li>Company grouping for bots (OpenAI, Anthropic, Google, Meta, etc.).<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Live Traffic Monitor: plugin now writes its own access log \u2014 bot detection works without server log access.<\/li>\n<li>Automatic 5 MB log rotation.<\/li>\n<li>Proxy header support (X-Forwarded-For \/ CF-Connecting-IP).<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added 20+ new bot signatures: GrokBot, MistralAI-User, Gemini, Google-Agent, TikTokSpider, CCBot, AI2Bot, SEO researcher bots, and more.<\/li>\n<li>Donut chart for bot share of voice.<\/li>\n<li>Configurable data retention (default 30 days).<\/li>\n<li>Configurable sync schedule.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Detects GPTBot, ClaudeBot, PerplexityBot, Googlebot, bingbot, and 10 additional LLM bots.<\/li>\n<li>Dashboard with KPI cards and daily trend chart.<\/li>\n<li>Log Viewer with raw line display.<\/li>\n<li>WP-Cron sync with configurable interval.<\/li>\n<li>Zero-config bot detection from WordPress logs.<\/li>\n<\/ul>","raw_excerpt":"Know which AI crawlers visit your site, how often, and what they read. Zero-config bot detection from your existing WordPress logs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321955"}],"author":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/abignu"}],"wp:attachment":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321955"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321955"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321955"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321955"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321955"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}