{"id":256058,"date":"2026-04-09T22:57:31","date_gmt":"2026-04-09T22:57:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/content-performance-analyzer\/"},"modified":"2026-08-01T23:09:29","modified_gmt":"2026-08-01T23:09:29","slug":"content-performance-analyzer","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/content-performance-analyzer\/","author":20304526,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.4","stable_tag":"1.4.4","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Content Performance Analyzer","header_author":"Wajahat Mubashir","header_description":"Analyze your website's content performance using GA4 and Search Console data with AI-powered recommendations and content analysis.","assets_banners_color":"0d2c4b","last_updated":"2026-08-01 23:09:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/cpanalyzer.com\/","header_author_uri":"https:\/\/wajahatmubashir.netlify.app\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":631,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"wajahatmubashir","date":"2026-04-09 22:58:46"},"1.0.1":{"tag":"1.0.1","author":"wajahatmubashir","date":"2026-04-09 23:16:32"},"1.1.0":{"tag":"1.1.0","author":"wajahatmubashir","date":"2026-07-20 10:12:47"},"1.1.1":{"tag":"1.1.1","author":"wajahatmubashir","date":"2026-07-20 11:44:28"},"1.1.2":{"tag":"1.1.2","author":"wajahatmubashir","date":"2026-07-24 15:11:57"},"1.2.0":{"tag":"1.2.0","author":"wajahatmubashir","date":"2026-07-26 22:46:59"},"1.3.0":{"tag":"1.3.0","author":"wajahatmubashir","date":"2026-07-27 21:26:27"},"1.4.1":{"tag":"1.4.1","author":"wajahatmubashir","date":"2026-07-28 16:49:35"},"1.4.2":{"tag":"1.4.2","author":"wajahatmubashir","date":"2026-07-30 12:45:12"},"1.4.4":{"tag":"1.4.4","author":"wajahatmubashir","date":"2026-08-01 23:09:29"}},"upgrade_notice":{"1.4.4":"<p>Analysis is no longer &quot;done&quot; with gaps: pages the AI run could not finish now fill in automatically in the background, one page every couple of minutes. The queue paces itself under free-tier limits, backs off when rate-limited, skips pages that cannot fit, and stops with a clear message on configuration errors.<\/p>","1.4.3":"<p>Fixes two free-tier AI pain points: oversized requests on content-heavy pages now retry automatically with a slimmer payload instead of failing (Groq&#039;s 8k token budget), and the insights page no longer shows an endless &quot;Processing&quot; spinner when an AI run failed \u2014 it now says what happened and how to retry.<\/p>","1.4.2":"<p>Clearer diagnosis when a page&#039;s traffic drop is not a search problem. Pages with real visitors but little Google search presence are now told the drop came from another channel \u2014 with a pointer to the GA4 channel breakdown \u2014 instead of a vague &quot;re-check next run.&quot; Homepage and per-page metric fixes from the recent updates are included.<\/p>","1.4.1":"<p>The decay diagnosis now rules out the three great false alarms before naming a cause: seasonal patterns (compared against the same window last year), technical\/indexing problems (impression collapse, noindex tags, foreign canonicals), and GA4 tracking breaks. Seasonal dips are marked expected and never flagged. No action needed.<\/p>","1.4.0":"<p>The plugin now diagnoses WHY a page is losing traffic \u2014 ranking decay, zero-click capture, demand decay, a self-inflicted edit, or a non-search drop \u2014 and matches the fix to the cause. Adds keyword cannibalization detection, 6-month click trends, orphan-page detection, and an alert when scans flag new pages. No action needed; run your next analysis to see the new diagnosis.<\/p>","1.3.0":"<p>Adds AEO tools: answer-engine readiness scores, question gaps from Search Console, one-click FAQ answers, AI referral tracking, and llms.txt. Pick your exact AI model per budget. Includes important rate-limit fixes for free AI tiers \u2014 recommended for all Gemini users.<\/p>","1.2.0":"<p>Connect Google with one click \u2014 no more Cloud Console setup. Adds one-click page import, AI alt text fixes, Gemini support, and PageSpeed with no API key. Existing connections and data carry over unchanged.<\/p>","1.1.2":"<p>Adds a clear reconnect notice when the Google connection expires, so GA4 and Search Console data never silently drop to zero. No action needed unless the notice appears.<\/p>","1.1.1":"<p>Removes the activation opt-in screen for a cleaner setup. No action needed \u2014 your settings and data carry over.<\/p>","1.1.0":"<p>Every feature is now free, with no URL or upload limits. Google sign-in has moved to OAuth 2.0 \u2014 after updating, reconnect your Google account on the Settings page to resume GA4 and Search Console data. Adds competitor gap analysis, key-event conversions, safer interlinking, and security fixes.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3623852,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3623852,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3502886,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.2.0","1.3.0","1.4.1","1.4.2","1.4.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[19795,267419,1005,127115,31034],"plugin_category":[36,54,55],"plugin_contributors":[238187],"plugin_business_model":[],"class_list":["post-256058","plugin","type-plugin","status-publish","hentry","plugin_tags-content-audit","plugin_tags-content-decay","plugin_tags-google-analytics","plugin_tags-search-console","plugin_tags-seo-audit","plugin_category-analytics","plugin_category-security-and-spam-protection","plugin_category-seo-and-marketing","plugin_contributors-wajahatmubashir","plugin_committers-wajahatmubashir"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/content-performance-analyzer\/assets\/icon-128x128.png?rev=3623852","icon_2x":"https:\/\/ps.w.org\/content-performance-analyzer\/assets\/icon-256x256.png?rev=3623852","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Your AI content strategist for WordPress.<\/strong> Content Performance Analyzer finds the pages that are quietly losing traffic, rankings, or conversions \u2014 and tells you exactly how to fix each one. It connects your Google Analytics 4 (GA4) and Google Search Console accounts, joins that data with the actual content of each page, and lets AI turn it into specific, page-level recommendations \u2014 so you spend your time refreshing content that matters instead of digging through spreadsheets.<\/p>\n\n<p>Every feature is free. No premium tier, no URL limits, no locked features.<\/p>\n\n<p>Every scan checks each page for three common problems:<\/p>\n\n<ul>\n<li><strong>Content decay<\/strong> \u2014 pages that used to rank and are now losing traffic. Refreshing an old post is far cheaper than writing a new one, and these are the fastest wins.<\/li>\n<li><strong>SEO opportunities<\/strong> \u2014 pages with strong impressions but weak click-through or ranking, where a title or heading change has outsized impact.<\/li>\n<li><strong>Conversion gaps<\/strong> \u2014 pages getting real traffic but few conversions, often just missing a clear call to action.<\/li>\n<\/ul>\n\n<p>For each flagged page, the built-in AI analysis writes a specific recommendation you can act on \u2014 not generic advice. Add an optional Serper API key and it also compares your page against the pages currently ranking for your keyword, so you can see what top results cover that you don't.<\/p>\n\n<p>This plugin is a strong fit for blogs, resource libraries, and content-heavy sites with dozens to a few hundred posts, and for freelancers or agencies managing content for clients.<\/p>\n\n<h4>What You Get<\/h4>\n\n<ul>\n<li><strong>AEO readiness score<\/strong> \u2014 every page rated 0-100 on how quotable it is for AI search (question headings, direct answers, schema, freshness), with each failed check named<\/li>\n<li><strong>Question gaps<\/strong> \u2014 real Search Console queries you rank for that no heading on the page answers, plus one-click AI answer blocks with FAQ schema<\/li>\n<li><strong>AI referral tracking<\/strong> \u2014 see which pages get visitors from ChatGPT, Perplexity, Copilot, and Gemini<\/li>\n<li><strong>llms.txt<\/strong> \u2014 optional machine-readable site guide for AI crawlers, generated from your analyzed pages<\/li>\n<li><strong>One-click Google connection<\/strong> \u2014 connect Analytics and Search Console with a single sign-in, then pick your property and site from dropdowns. No Google Cloud setup required<\/li>\n<li><strong>One-click page import<\/strong> \u2014 load every published page and post from your site with checkboxes, instead of pasting URLs<\/li>\n<li><strong>Works before any setup<\/strong> \u2014 content-only mode checks pages for missing alt text, thin content, and heading problems with zero credentials<\/li>\n<li><strong>Performance flagging<\/strong> \u2014 every page automatically labeled for decay, SEO opportunity, or conversion gap<\/li>\n<li><strong>AI content recommendations<\/strong> \u2014 specific, page-level refresh guidance powered by OpenAI, Groq, or Google Gemini (free tier)<\/li>\n<li><strong>AI alt text fixes<\/strong> \u2014 lists the exact images missing alt text and writes and applies alt text for you, using image recognition<\/li>\n<li><strong>Competitor gap analysis<\/strong> \u2014 optional Serper integration compares your content against top-ranking pages<\/li>\n<li><strong>GA4 conversion tracking<\/strong> \u2014 uses your GA4 key events by default, with support for custom conversion events like demo or trial signups<\/li>\n<li><strong>Keyword insights<\/strong> \u2014 shows the primary keyword each page ranks for, pulled from Search Console<\/li>\n<li><strong>Smart interlinking<\/strong> \u2014 safe, AI-suggested internal links inserted only on exact anchor matches<\/li>\n<li><strong>PageSpeed Insights without a key<\/strong> \u2014 Core Web Vitals and performance scores through the free hosted service, or your own API key if you prefer<\/li>\n<li><strong>Background processing<\/strong> \u2014 analyzes hundreds of URLs in batches without timeouts, with live progress<\/li>\n<li><strong>CSV export<\/strong> \u2014 download the full insights table for reporting or further analysis<\/li>\n<\/ul>\n\n<p>Nothing here requires a Google Cloud project. The Google connection and PageSpeed both run through a free hosted service, so setup is a single sign-in. If you would rather run everything yourself, every hosted convenience has a self-hosted alternative: add your own PageSpeed or AI API key in Settings, and enable the <code>cpanalyzer_show_byo_oauth_fields<\/code> filter to use your own Google OAuth client.<\/p>\n\n<h3>Documentation<\/h3>\n\n<p>For full developer-facing documentation of architecture, data flow, cron jobs, AJAX endpoints, storage, and a file-by-file reference, see:<\/p>\n\n<ul>\n<li><code>docs\/PLUGIN-DOCUMENTATION.md<\/code><\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to external services to collect analytics data and generate AI-powered recommendations. Below is a complete disclosure of all external APIs used:<\/p>\n\n<p><strong>Plugin Privacy Policy:<\/strong> https:\/\/cpanalyzer.com\/privacy \u2014 covers the plugin and its hosted Google connection service (auth.cpanalyzer.com), including what Google data is accessed, with whom it is shared (no one, outside the narrow cases listed there), how it is protected, and how to delete it.<\/p>\n\n<h4>1. Content Performance Analyzer Hosted Service (auth.cpanalyzer.com)<\/h4>\n\n<p><strong>What it does:<\/strong> This is the plugin author's own service. It does two jobs: it holds the Google OAuth client credentials so you do not have to create a Google Cloud project, and it runs PageSpeed Insights lookups so you do not have to supply a PageSpeed API key.<\/p>\n\n<p><strong>Data sent:<\/strong><\/p>\n\n<ul>\n<li><strong>Registration<\/strong> \u2014 your site's home URL, sent once to obtain an installation token that identifies your site to the service.<\/li>\n<li><strong>Google sign-in<\/strong> \u2014 the WordPress admin URL to return you to after sign-in, and the one-time handoff code Google issues.<\/li>\n<li><strong>Token refresh<\/strong> \u2014 your Google refresh token, forwarded to Google so a new access token can be issued.<\/li>\n<li><strong>PageSpeed<\/strong> \u2014 the URL being analyzed, the strategy (mobile or desktop), and your installation token.<\/li>\n<\/ul>\n\n<p><strong>What is stored:<\/strong> The service is stateless by design. Your Google access and refresh tokens are stored in your own WordPress database, not on the service. The only thing the service stores is a one-time sign-in handoff entry that expires after five minutes. No page content, analytics data, or search data ever passes through it.<\/p>\n\n<p><strong>When:<\/strong> When you click \"Connect with Google,\" when a stored Google token needs refreshing, and when PageSpeed analysis runs without your own PSI API key.<\/p>\n\n<p><strong>How to avoid it entirely:<\/strong> Enable the <code>cpanalyzer_show_byo_oauth_fields<\/code> filter and supply your own Google OAuth client, and add your own PageSpeed API key in Settings. The plugin then talks to Google directly and never contacts this service.<\/p>\n\n<p><strong>Service URL:<\/strong>\n* https:\/\/auth.cpanalyzer.com (endpoints: \/auth\/start, \/api\/v1\/register, \/token\/exchange, \/token\/refresh, \/api\/v1\/pagespeed)<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/cpanalyzer.com\/terms<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/cpanalyzer.com\/privacy<\/p>\n\n<h4>2. Google Analytics 4 (GA4)<\/h4>\n\n<p><strong>What it does:<\/strong> Retrieves traffic and engagement metrics for your website's content pages, and lists the GA4 properties on your account so you can pick one from a dropdown.<\/p>\n\n<p><strong>Data sent:<\/strong> Your GA4 Property ID, date ranges, requested URL paths\/metrics, and any custom conversion event names you configure. Authentication uses OAuth 2.0 \u2014 an access token is sent with each request. By default that token is obtained through the hosted service in section 1; if you supply your own Google OAuth client, it is obtained directly from Google instead.<\/p>\n\n<p><strong>When:<\/strong> When you manually trigger data collection, when scheduled daily automatic refresh runs, or when you upload URLs for analysis.<\/p>\n\n<p><strong>Service URLs:<\/strong>\n* https:\/\/analyticsdata.googleapis.com\/ (GA4 Data API)\n* https:\/\/analyticsadmin.googleapis.com\/ (GA4 Admin API \u2014 lists your properties for the settings dropdown)\n* https:\/\/accounts.google.com\/o\/oauth2\/v2\/auth and https:\/\/oauth2.googleapis.com\/ (OAuth 2.0 sign-in, token exchange, refresh, and revocation)\n* https:\/\/www.googleapis.com\/oauth2\/v3\/tokeninfo (token validation)<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>3. Google Search Console<\/h4>\n\n<p><strong>What it does:<\/strong> Retrieves search performance data (clicks, impressions, CTR, average position) and search queries for your verified website, and lists the sites on your account so you can pick one from a dropdown.<\/p>\n\n<p><strong>Data sent:<\/strong> Your verified site URL, date ranges, and performance data queries, authenticated with the same OAuth 2.0 access token as GA4.<\/p>\n\n<p><strong>When:<\/strong> When you manually trigger data collection, when scheduled daily automatic refresh runs, or when you upload URLs for analysis.<\/p>\n\n<p><strong>Service URLs:<\/strong>\n* https:\/\/searchconsole.googleapis.com\/ (Search Console API)\n* https:\/\/www.googleapis.com\/webmasters\/v3\/sites (lists your verified sites for the settings dropdown)<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/support.google.com\/webmasters\/answer\/4559176<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>4. Google PageSpeed Insights (Optional)<\/h4>\n\n<p><strong>What it does:<\/strong> Fetches performance scores, Core Web Vitals, and diagnostic information for specific URLs.<\/p>\n\n<p><strong>Data sent:<\/strong> The URL being analyzed and the analysis strategy (mobile or desktop). The URL is sent to Google's servers for performance testing. No API key is required \u2014 by default the request is relayed through the hosted service in section 1, which supplies the key. If you add your own PageSpeed API key in Settings, the plugin calls Google directly and your key is sent with the request.<\/p>\n\n<p><strong>When:<\/strong> Only when you enable PageSpeed Insights in settings and trigger analysis. This service is off by default and completely optional.<\/p>\n\n<p><strong>Service URL:<\/strong>\n* https:\/\/www.googleapis.com\/pagespeedonline\/v5\/runPagespeed (direct, when you supply your own key)\n* https:\/\/auth.cpanalyzer.com\/api\/v1\/pagespeed (hosted relay, the default \u2014 see section 1)<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/developers.google.com\/terms<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>5. AI Provider \u2014 OpenAI, Groq, or Google Gemini (Optional)<\/h4>\n\n<p><strong>What it does:<\/strong> Generates content improvement recommendations, answer blocks, alt text, and smart interlinking suggestions based on your page performance data and page content. You choose one provider in Settings and supply that provider's API key. Without a key, no AI requests are made and the plugin runs in content-check-only mode.<\/p>\n\n<p><strong>Data sent:<\/strong> Page URLs, performance metrics (traffic, engagement, search queries and rankings), content structure (title, meta description, headings, word count, links), excerpts of your page text, and \u2014 for the Smart Interlinking feature \u2014 up to a few thousand characters of the post text being analyzed. For AI alt text, the image itself is sent to the provider for recognition (OpenAI and Gemini only). Your API key is sent with each request. No site visitor data is ever sent.<\/p>\n\n<p><strong>When:<\/strong> When AI analysis runs for flagged pages (manually triggered, as part of batch processing you start, or via the background queue that fills in pages a previous run could not finish), and when you use Smart Interlinking, answer blocks, or alt text generation.<\/p>\n\n<p><strong>Service URLs:<\/strong>\n* OpenAI: https:\/\/api.openai.com\/v1\/chat\/completions\n* Groq: https:\/\/api.groq.com\/openai\/v1\/chat\/completions\n* Google Gemini: https:\/\/generativelanguage.googleapis.com\/v1beta\/openai\/chat\/completions<\/p>\n\n<p><strong>OpenAI Terms:<\/strong> https:\/\/openai.com\/policies\/terms-of-use<\/p>\n\n<p><strong>OpenAI Privacy:<\/strong> https:\/\/openai.com\/policies\/privacy-policy<\/p>\n\n<p><strong>Groq Terms:<\/strong> https:\/\/groq.com\/terms\/<\/p>\n\n<p><strong>Groq Privacy:<\/strong> https:\/\/groq.com\/privacy-policy\/<\/p>\n\n<p><strong>Google Gemini API Terms:<\/strong> https:\/\/ai.google.dev\/gemini-api\/terms<\/p>\n\n<p><strong>Google Privacy:<\/strong> https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>6. Serper.dev (Optional)<\/h4>\n\n<p><strong>What it does:<\/strong> Retrieves the top Google search results for your page's primary keyword so the plugin can compare your content against ranking competitors.<\/p>\n\n<p><strong>Data sent:<\/strong> The search keyword derived for your page, together with your Serper API key. When results are returned, the plugin also fetches the publicly available HTML of the top-ranking competitor pages directly from their websites to extract headings and structure.<\/p>\n\n<p><strong>When:<\/strong> Only when you provide a Serper API key in settings and AI content analysis runs. This service is completely optional \u2014 without a key, no Serper requests or competitor fetches are made.<\/p>\n\n<p><strong>Service URL:<\/strong>\n* https:\/\/google.serper.dev\/search<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/serper.dev\/terms<\/p>\n\n<p><strong>Privacy Policy:<\/strong> https:\/\/serper.dev\/privacy<\/p>\n\n<h4>Important Notes<\/h4>\n\n<ul>\n<li>All API communications use secure HTTPS connections<\/li>\n<li>No Google Cloud project or PageSpeed API key is required \u2014 both run through the hosted service described in section 1. You can replace either with your own credentials at any time<\/li>\n<li>AI recommendations do require an API key from the provider you choose (OpenAI, Groq, or Google Gemini). Serper is optional and needs its own key<\/li>\n<li>No data is sent without your explicit configuration and action<\/li>\n<li>You can disable any optional service (PageSpeed Insights, Serper, AI analysis) and the plugin still performs content checks<\/li>\n<li>No site visitor data or personal information about your users is transmitted to any of these services<\/li>\n<li>Performance metrics, content structure, and page text excerpts are shared only with the AI provider you configure \u2014 never with the hosted service, which sees only your site URL and the URLs you ask PageSpeed to test<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin through the 'Plugins' screen in WordPress<\/li>\n<li>Go to Content Insights \u2192 URL Management and click \"Load Pages From Your Site\" to import your pages, then start a scan \u2014 the content check works with no setup at all<\/li>\n<li>To add traffic data, go to Content Insights \u2192 Settings and click \"Connect with Google,\" then pick your GA4 property and Search Console site from the dropdowns<\/li>\n<li>Optional: add an OpenAI, Groq, or Google Gemini API key for AI recommendations, and toggle on PageSpeed analysis (no key needed)<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20google%20cloud%20project%20or%20api%20keys%20to%20start%3F\"><h3>Do I need a Google Cloud project or API keys to start?<\/h3><\/dt>\n<dd><p>No. Click \"Connect with Google,\" sign in, and pick your GA4 property and Search Console site from dropdowns. There is no Cloud Console setup, no OAuth client to create, and no PageSpeed key to obtain. You can also run the content check with no credentials at all.<\/p><\/dd>\n<dt id=\"is%20it%20really%20free%3F\"><h3>Is it really free?<\/h3><\/dt>\n<dd><p>Yes. Every feature is free, with no URL limits, no locked features, and no premium tier. The one cost that can apply is not paid to this plugin: AI recommendations call the AI provider you choose, so that provider's own pricing applies. Groq and Google Gemini both have free tiers that work well for this.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20pay%20for%20ai%3F\"><h3>Do I need to pay for AI?<\/h3><\/dt>\n<dd><p>Not necessarily. Groq and Google Gemini offer free tiers that handle typical sites, and Groq is the recommended free provider based on output-quality testing. OpenAI generally produces the strongest recommendations if you already have credit. Without any AI key, the plugin still imports your traffic data, flags decaying pages, diagnoses why they dropped, and runs every content check \u2014 you just do not get the written fix plans.<\/p><\/dd>\n<dt id=\"what%20is%20content%20decay%3F\"><h3>What is content decay?<\/h3><\/dt>\n<dd><p>Content decay is when a page that used to perform well gradually loses traffic and rankings, usually without anything visibly breaking. It is the most common reason older posts quietly stop earning traffic, and refreshing a decayed page is typically far cheaper than writing a new one. This plugin finds those pages and classifies why each one dropped \u2014 ranking slide, zero-click capture, falling demand, a self-inflicted edit, or a drop that was never about search at all.<\/p><\/dd>\n<dt id=\"does%20this%20work%20alongside%20google%20site%20kit%3F\"><h3>Does this work alongside Google Site Kit?<\/h3><\/dt>\n<dd><p>Yes, and they do different jobs. Site Kit reports your GA4 and Search Console numbers. This plugin joins those numbers to the actual content of each page, works out which pages are losing ground and why, and writes a specific fix for each. Running both is fine \u2014 they do not conflict, and each maintains its own Google connection.<\/p><\/dd>\n<dt id=\"what%20data%20leaves%20my%20site%3F\"><h3>What data leaves my site?<\/h3><\/dt>\n<dd><p>Page URLs, performance metrics, content structure, and excerpts of your page text go to the AI provider you configure. Your site URL and any URLs you test go to the hosted service for PageSpeed. No site visitor data or personal information about your users is ever transmitted. The External Services section above documents every endpoint and exactly what is sent to each.<\/p><\/dd>\n<dt id=\"how%20long%20does%20analysis%20take%20for%20large%20sites%3F\"><h3>How long does analysis take for large sites?<\/h3><\/dt>\n<dd><p>Most sites see AI suggestions within roughly 6 to 40 minutes for 200 URLs, depending on your AI provider's rate limits. Progress is shown live and refreshes automatically. If a run hits provider rate limits, the remaining pages fill in on their own in the background, roughly one page every couple of minutes.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20slow%20down%20my%20site%3F\"><h3>Does this plugin slow down my site?<\/h3><\/dt>\n<dd><p>No. All heavy processing runs asynchronously in the background through WordPress cron, so visitors are unaffected.<\/p><\/dd>\n<dt id=\"will%20the%20analysis%20time%20out%20on%20shared%20hosting%3F\"><h3>Will the analysis time out on shared hosting?<\/h3><\/dt>\n<dd><p>It is built for it. Work is processed in small batches with dynamic timeout prediction and a safety buffer, and processing continues even if you close the browser. Very restrictive hosts can still interrupt a batch \u2014 if that happens, the next scheduled run picks up where it stopped.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20on%20multisite%3F\"><h3>Can I use this on multisite?<\/h3><\/dt>\n<dd><p>Yes, the plugin is multisite compatible.<\/p><\/dd>\n<dt id=\"how%20do%20i%20access%20the%20plugin%20settings%20after%20activation%3F\"><h3>How do I access the plugin settings after activation?<\/h3><\/dt>\n<dd><p>After activation you will see \"View Insights\" and \"Settings\" links directly on the WordPress plugins page, or navigate to Content Insights in your admin menu.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Analysis is no longer \"done\" with gaps: flagged pages the AI run could not finish now fill in automatically in the background, one page every couple of minutes<\/li>\n<li>The queue paces itself under free-tier limits, backs off when rate-limited, skips pages that cannot fit even after compression, and stops with a clear message on configuration errors<\/li>\n<li>The insights page shows calm automatic progress with the next attempt time while leaving the existing manual retry available<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Oversized AI requests now recover automatically: when a content-heavy page produces a request bigger than the provider's token budget or context window (for example Groq's free-tier 8,000 tokens per minute), the plugin retries once with a compressed payload \u2014 trimmed body text, no competitor excerpts \u2014 instead of failing the page. All metrics and the decay diagnosis stay in the request, so recommendations remain grounded<\/li>\n<li>The insights page no longer shows an endless \"Processing\u2026\" spinner when nothing is running: the spinner now appears only while work is genuinely in flight, and flagged pages left without AI suggestions after a failed or rate-limited run get an honest notice explaining what happened and pointing to the Retry button<\/li>\n<li>Sites without an AI key configured now see clear guidance on flagged pages instead of a permanent processing state<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Clearer non-search diagnosis: when a page had real GA4 traffic but almost no Google search clicks and dropped, the plugin now says the drop came from another channel (direct, email, social, referral, or internal links) and points to the GA4 channel breakdown \u2014 instead of the vague \"not enough Search Console history, re-check next run\"<\/li>\n<li>Pages with a search footprint but negligible clicks are classified as a non-search drop with a channel-breakdown fix; pages with no search footprint at all get a cautious hypothesis that also suggests confirming the page is indexed<\/li>\n<li>Reflects a real distinction: GA4 views count every channel, while Search Console clicks count only Google organic search \u2014 a page can have high views and near-zero search clicks<\/li>\n<li>Includes the homepage and per-page metric collection fixes: host-aware Search Console paths so subdomains no longer overwrite the homepage row, GA4 ordering so top pages are never truncated out, and targeted recovery for any analyzed URL the bulk pull missed<\/li>\n<li>CSV export now includes the full AI recommendation set (SEO, AEO, GEO, engagement, measurement plan), model used, decay type and evidence, AEO readiness score, AI referral sessions, and inbound internal link counts<\/li>\n<li>Added a link to the plugin privacy policy on the settings screen<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Seasonality control: every demand-decay call is checked against the same 30-day window one year ago in Search Console. A drop that matches last year's numbers is diagnosed \"Seasonal pattern (expected)\" \u2014 shown in green, never flagged, and the AI is told no action is needed<\/li>\n<li>Technical\/indexing detection: impressions collapsing to near zero is diagnosed as an indexing problem, not demand decay. The live-page scrape confirms it \u2014 a noindex meta tag or a canonical pointing at a different URL upgrades the diagnosis to confirmed with the exact cause named<\/li>\n<li>Tracking-break detection: GA4 views collapsing to near zero while Search Console still records clicks is diagnosed as a broken GA4 tag, not a traffic loss \u2014 check the tag before touching the content<\/li>\n<li>AI Overview confirmation: the live SERP check now detects Google AI Overviews in addition to answer boxes when confirming zero-click capture<\/li>\n<li>noindex tags and canonical mismatches now appear in every page's content issues list, whether or not traffic dropped<\/li>\n<li>AI recommendations updated for all three new diagnosis types: technical issues lead with the indexing fix, tracking breaks lead with the tag check, and seasonal dips get no busywork<\/li>\n<li>Cleaner settings: the legacy OAuth Client ID\/Secret fields are hidden now that Connect with Google is one click (they still appear for sites already using their own credentials), and PageSpeed options only show while the feature is enabled<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Decay-type diagnosis: every traffic drop is classified from real period deltas \u2014 ranking decay (position slid), zero-click capture (still ranking, SERP answers before the click), demand decay (topic losing searches), or a non-search drop (organic healthy, look at other channels) \u2014 with the evidence and the matching fix shown on each page<\/li>\n<li>Self-inflicted decay detection: if a page was edited inside the drop window, the diagnosis warns to compare the previous revision before assuming natural decay \u2014 only possible from inside WordPress<\/li>\n<li>6-month click trends: each page's clicks are tracked across six 28-day periods to expose sustained declines and distance from peak, not just one week-over-week dip<\/li>\n<li>Keyword cannibalization detection: queries where two or more of your own pages split clicks over the last 90 days, listed per page with positions, so you can consolidate instead of rewriting<\/li>\n<li>Live SERP confirmation (optional, with a Serper key): confirms zero-click capture when an answer box sits above your result, and flags intent drift when the top 10 shifts to video, forum, or commerce formats<\/li>\n<li>Orphan-page detection: pages no other content links to are flagged, with an editorial inbound-link count per page (menus and widgets excluded)<\/li>\n<li>New-issue alerts: after any scan \u2014 including the daily automatic one \u2014 a dashboard notice lists pages that were healthy last run and are flagged now<\/li>\n<li>AI recommendations now match the fix to the diagnosed decay type: no more content-refresh advice for pages whose topic lost demand, and non-search drops are never framed as SEO problems<\/li>\n<li>Previous-period clicks, position, and engagement rate are now collected and shown alongside impressions, completing the period-over-period picture<\/li>\n<li>Fixed: decay flag compared a page against the wrong page's history in one code path; AI referral session counts could drop out of the insights table after a re-sync<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>AEO readiness score: every page rated 0-100 on answer-engine quotability with a named pass\/fail checklist (question headings, direct answers, structured data, lists, freshness)<\/li>\n<li>Question gaps: Search Console queries you rank for (positions 2-20) that no page heading answers \u2014 each a featured-snippet and AI-answer opportunity<\/li>\n<li>One-click answer blocks: AI writes a concise answer grounded in the page's own content, appends it as a Q&amp;A block, and adds FAQPage schema (skipped if the page already has one)<\/li>\n<li>AI referral tracking: sessions arriving from ChatGPT, Perplexity, Copilot, Gemini, and Claude shown per page<\/li>\n<li>Optional llms.txt: a machine-readable site guide for AI crawlers, with automatic conflict detection if one already exists<\/li>\n<li>Choose your exact AI model per provider from a dropdown with cost hints, or leave it automatic; every AI action now shows which model produced it<\/li>\n<li>OpenAI automatic mode upgraded to the flagship model with graceful fallbacks; gpt-4o-mini retired<\/li>\n<li>Requests adapt automatically to newer OpenAI model requirements (max_completion_tokens, fixed temperature) and to restricted-project model allowlists<\/li>\n<li>Rate-limit resilience: no more retry cascades that burn free-tier quotas, partial results are saved with honest progress messages, and Gemini runs are paced automatically<\/li>\n<li>AI errors now name every model that failed and why, instead of only the last one<\/li>\n<li>Sharper recommendations: prompts require citing the page's actual data and concrete deliverables, and SEO\/AEO\/GEO fields are precisely defined (GEO now means generative-engine visibility, not local SEO)<\/li>\n<li>Live search on both page pickers; select-all applies to search results; the URL import picker loads automatically<\/li>\n<li>URL Status table refreshes automatically when background scans finish<\/li>\n<li>Groq is now the recommended free provider based on output-quality testing; status labels reflect the active provider<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>One-click \"Connect with Google\" \u2014 sign in and pick your account, no Google Cloud project or OAuth credentials needed (your own credentials still work as an advanced option)<\/li>\n<li>GA4 property and Search Console site selection via dropdowns loaded from your connected account, replacing hand-typed IDs<\/li>\n<li>One-click page import: load every published page and post with checkboxes and select-all, instead of pasting URLs<\/li>\n<li>Content-only mode: fresh installs can scan for content issues before connecting anything, with a guided getting-started flow<\/li>\n<li>AI alt text fixes: see exactly which images lack alt text, then generate and apply alt text in one click \u2014 vision-based on OpenAI and Gemini, with library and page content both updated and existing alt text never overwritten<\/li>\n<li>Google Gemini added as an AI provider with a generous free tier, alongside OpenAI and Groq<\/li>\n<li>PageSpeed Insights now works without an API key through a free hosted service \u2014 the API key field is gone entirely<\/li>\n<li>Pick exactly which pages get PageSpeed analysis with a checkbox list (up to 15), or leave it automatic<\/li>\n<li>AI responses now use enforced JSON output for more reliable recommendations across all providers<\/li>\n<li>API key fields warn when the key format doesn't match the selected provider<\/li>\n<li>Image counts no longer double-count on sites using lazy-loading plugins<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Expired or revoked Google connections now show a clear reconnect notice on plugin pages instead of silently reporting zero GA4 and Search Console data<\/li>\n<li>OAuth failure logs now include Google's error code (for example invalid_grant) for faster diagnosis<\/li>\n<li>Fixed the analysis waiting banner staying visible indefinitely when pages in good standing were present<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Removed the Freemius integration and its activation opt-in screen for a simpler, self-contained setup<\/li>\n<li>Added a standalone uninstall routine that fully cleans up options, scheduled tasks, and plugin data on deletion<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>All features are now fully free \u2014 removed license requirement and premium gating<\/li>\n<li>Data collection, batch processing, AI suggestions, internal links, and smart interlinking work without activation<\/li>\n<li>Conversions now use GA4 key events by default, with form_submit fallback and an optional custom event list<\/li>\n<li>PageSpeed analysis is now selective (flagged and high-traffic pages) instead of every URL on every scan<\/li>\n<li>Daily automatic rescan is now opt-in for new installs to protect your API quotas<\/li>\n<li>Safer smart interlinking: links are only inserted on exact anchor matches, never inside HTML tags or existing links<\/li>\n<li>Fixed applied interlinks being dropped on save in some Gutenberg blocks<\/li>\n<li>Data collection now reports API failures instead of showing success with missing data<\/li>\n<li>Off-peak scheduling defaults to the site timezone<\/li>\n<li>Security and cleanup: removed debug endpoints and dead code, hardened CSV export, moved inline scripts and styles to enqueued assets<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Progressive content analysis - analyzes all pages without artificial limits<\/li>\n<li>Smart waiting banner with realistic time estimates and auto-refresh<\/li>\n<li>Priority-based processing - flagged pages analyzed first for faster AI suggestions<\/li>\n<li>Intelligent AI timing - AI waits for complete content data for optimal recommendations<\/li>\n<li>Plugin page integration - direct Settings and View Insights links<\/li>\n<li>3x performance improvement - reduced from 15.5s to ~3s average per page<\/li>\n<li>Dynamic batch sizing (6-12 pages) based on priorities and system performance<\/li>\n<li>Dynamic timeout prediction with 75-second safety buffer prevents all timeouts<\/li>\n<li>Real-time progress tracking with detailed status updates<\/li>\n<li>Enhanced user experience with transparent progress communication<\/li>\n<\/ul>\n\n<h4>Previous Version<\/h4>\n\n<ul>\n<li>Complete rewrite with modular architecture<\/li>\n<li>Added automatic keyword analysis and optimization suggestions<\/li>\n<li>Implemented AI suggestion expiry system<\/li>\n<li>Enhanced dashboard with better UX<\/li>\n<li>Batch URL upload and retry\/rescan features<\/li>\n<li>WordPress coding standards compliance<\/li>\n<\/ul>","raw_excerpt":"Audit content decay with GA4 and Search Console data, and get a specific AI fix plan for every page losing traffic. Every feature free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/256058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=256058"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wajahatmubashir"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=256058"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=256058"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=256058"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=256058"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=256058"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=256058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}