<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[RP Team]]></title><description><![CDATA[We are the team behind Royal Plugins]]></description><link>https://royalplugins.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png</url><title>RP Team</title><link>https://royalplugins.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 29 Jul 2026 16:05:31 GMT</lastBuildDate><atom:link href="https://royalplugins.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[RP Team]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[royalplugins@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[royalplugins@substack.com]]></itunes:email><itunes:name><![CDATA[RP Team]]></itunes:name></itunes:owner><itunes:author><![CDATA[RP Team]]></itunes:author><googleplay:owner><![CDATA[royalplugins@substack.com]]></googleplay:owner><googleplay:email><![CDATA[royalplugins@substack.com]]></googleplay:email><googleplay:author><![CDATA[RP Team]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Email Every Plugin Author Dreads And Why I Don't Anymore.]]></title><description><![CDATA[You know the email plugin authors dread receiving?]]></description><link>https://royalplugins.substack.com/p/the-email-every-plugin-author-dreads</link><guid isPermaLink="false">https://royalplugins.substack.com/p/the-email-every-plugin-author-dreads</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Sun, 12 Jul 2026 04:27:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You know the email plugin authors dread receiving? I&#8217;ve gotten it twice this year. Both times a security researcher had found a vulnerability in one of my plugins. Both times my first reaction was somewhere between adrenaline and gratitude. That is a strange pair of emotions to have at the same time, and I want to explain why.</p><p>Six months ago I shipped a plugin called Royal MCP to the WordPress.org directory. It does a specific job: it lets AI clients like Claude and ChatGPT talk to a WordPress site through a secure authenticated endpoint. Since it went live, two independent researchers have found bugs in it. Both got fixed. Both are on the public record. Both are the reason the plugin is measurably safer today than it was when it launched.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>The first email</h2><p><strong>Alexis Lafontaine</strong>, via a security research platform called Patchstack. Alexis had found a broken access control gap on one of the plugin&#8217;s request paths. Certain tool calls could be reached without going through the authentication check. It was real. The fix landed a few days later. All tool calls now require authenticated credentials.</p><p>The whole exchange took under two weeks from initial report to public disclosure. Alexis was patient, precise, and generous with the reproduction steps. I fixed the code, verified with Alexis that the fix closed the vector, shipped the patch, and credited Alexis by name in the changelog. That is the model. That is what &#8220;responsible disclosure&#8221; actually looks like in practice.</p><h2>The second email</h2><p><strong>Alessandro Greco</strong>, who goes by Aleff, coordinated through WPScan (the WordPress vulnerability database owned by Automattic). Alessandro had found something more subtle. Once the plugin added OAuth support so AI clients could authenticate as specific WordPress users, a low-privileged user (someone with a Subscriber or Contributor role) could get a valid OAuth token and then use it to invoke operations they should not have been able to. The plugin was not checking, per tool call, whether the authenticated user&#8217;s actual role allowed the specific operation they were requesting.</p><p>We fixed it in v1.4.26. And then we did something bigger. We used Alessandro&#8217;s report as the trigger to build a role-based capability scanner and bake it into Royal MCP&#8217;s pre-ship process. Before any Royal MCP release ships to WordPress.org today, the scanner creates test accounts at every WordPress role tier, walks every entry point the plugin exposes, and verifies that low-privileged users cannot invoke operations they should not be able to.</p><p><strong>The pattern is now the internal model for anything Royal Plugins ships with a per-user role surface.</strong> One researcher&#8217;s report on one plugin became a permanent defense against the same class of bug for Royal MCP, with a repeatable model for future products. That is a return on investment that is hard to describe in words. It is the kind of thing you only get when you take a single disclosure seriously enough to treat it as a signal, not just a ticket.</p><h2>Why I don&#8217;t dread these emails anymore</h2><p>Most plugin authors treat their first disclosure email as a crisis. It is not. What can turn it into a crisis is how the author responds.</p><p>The bad response is depressingly common. Deny the report. Silently patch and pretend nothing happened. Go quiet for weeks. Argue with the researcher about severity. Threaten legal action. The vulnerability gets disclosed anyway (because the researcher owns the report). The plugin&#8217;s reputation takes a hit. Users lose trust. And the researcher makes sure other researchers know the vendor is difficult to work with.</p><p>The good response is boring. Acknowledge quickly. Fix quickly. Ship the patch. Credit the researcher by name. Move on. That is it. That is the whole thing.</p><p><strong>The good response takes less energy than the bad one.</strong> And it compounds. Every good response you ship makes the next researcher who finds a bug in your code more likely to contact you privately first. That is the reputation you actually want.</p><h2>Closed tickets are marketing, not damage</h2><p>This is the part nobody tells first-time plugin authors, and I wish someone had told me.</p><p>Public vulnerability records are not damage to your plugin&#8217;s reputation. They are the opposite. A record that says <strong>&#8220;found, fixed, verified, credited&#8221;</strong> is one of the strongest signals you can send to a prospective user that your plugin is being actively maintained by someone who takes it seriously. It says you have an intake process. It says you ship fixes fast. It says you are willing to put the entire chain of custody on the public record.</p><p>A plugin with no public vulnerability records could mean it has never had one. In practice, on any plugin of real complexity, it usually means the author has been hiding them or that no researcher has looked. Neither is a virtue.</p><p>When a prospective customer checks Wordfence&#8217;s public database or WPScan and sees clean patch records on Royal MCP, that is not a warning label. That is credibility. Every entry is proof that a class of issue was found, closed, and documented instead of shipped indefinitely into thousands of production sites.</p><p>Which is why I now treat those two records as bragging rights, not scars.</p><h2>If you build software</h2><p>At some point, someone will email you about a bug they found. Read the email. Reproduce the report. Fix it fast. Audit adjacent code while you are in there. Ship the patch. Credit the researcher by name. Publish the record.</p><p>Then keep building.</p><p>The email is not a bad day. It is a good one.</p><div><hr></div><p><em>The longer, more technical version of this piece with the full case study details lives on the Royal Plugins blog at <a href="https://royalplugins.com/blog/two-vulnerabilities-two-researchers-two-fixes/">royalplugins.com/blog/two-vulnerabilities-two-researchers-two-fixes</a>. </em></p><div><hr></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The 13 AI Bots Hitting Your WordPress Site Right Now (And What Each One Actually Does With Your Content)]]></title><description><![CDATA[GPTBot is the one everybody talks about. It's not even the most aggressive one on the list.]]></description><link>https://royalplugins.substack.com/p/the-13-ai-bots-hitting-your-wordpress</link><guid isPermaLink="false">https://royalplugins.substack.com/p/the-13-ai-bots-hitting-your-wordpress</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Thu, 09 Jul 2026 01:43:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Open your server access log right now and you will find AI crawlers. Not maybe. Not depending on your niche. Every WordPress site with an index in Google is being visited by AI training and retrieval bots today.</p><p>The tricky part is that these bots do very different things. Some are training crawlers, some are retrieval bots, and some are shopping agents. Blocking the wrong one can quietly remove you from citation graphs, from product search results, or from the answers that your future customers are about to see in ChatGPT.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here are the thirteen you are most likely to see, in rough order of how often they show up in the wild, with what each one does and what happens if you block it.</p><h2>1. GPTBot (OpenAI)</h2><p>The one that gets all the press. GPTBot is OpenAI&#8217;s training crawler. When it hits your site, the content it reads may end up in the next version of ChatGPT&#8217;s base model.</p><p><strong>What it collects:</strong> Full page HTML, most site sections it can reach.</p><p><strong>Blocking consequences:</strong> None to your ChatGPT visibility today, because base model training is not what makes ChatGPT cite you. Blocking GPTBot is one of the safer moves if you do not want your content in future training runs. It will not stop ChatGPT from citing you at query time, because ChatGPT uses a different bot for that.</p><h2>2. ChatGPT-User (OpenAI)</h2><p>The one people confuse with GPTBot, at their peril. ChatGPT-User is the on-demand fetcher. When a ChatGPT user asks a question and the model decides to fetch a URL to answer, ChatGPT-User is what makes the request.</p><p><strong>What it collects:</strong> A specific page in response to a user query.</p><p><strong>Blocking consequences:</strong> Real. If you block ChatGPT-User you remove your site from ChatGPT&#8217;s live citation results. Blogs that block ChatGPT-User stop appearing in the &#8220;Sources&#8221; list on ChatGPT answers. If you want to be citeable, keep this one allowed.</p><h2>3. OAI-SearchBot (OpenAI)</h2><p>OpenAI&#8217;s third crawler and the one most people forget exists. OAI-SearchBot indexes content for ChatGPT&#8217;s search product (the one that surfaces links in the ChatGPT UI, separate from the on-demand fetches ChatGPT-User does).</p><p><strong>What it collects:</strong> Web pages for the ChatGPT Search index.</p><p><strong>Blocking consequences:</strong> Removes your site from ChatGPT Search results. Same allow/block calculus as PerplexityBot below. If you want to be discoverable inside ChatGPT, keep this one allowed. OpenAI publishes its IP range at <code>openai.com/searchbot.json</code> so you can verify real hits versus spoofers.</p><h2>4. ClaudeBot (Anthropic)</h2><p>Anthropic&#8217;s training and retrieval crawler for Claude.</p><p><strong>What it collects:</strong> Full site content.</p><p><strong>Blocking consequences:</strong> Similar tradeoff to GPTBot plus ChatGPT-User combined. Anthropic runs a slightly different infrastructure where the same bot handles both training reads and some retrieval. Blocking ClaudeBot fully will remove you from Claude&#8217;s citation surface. Anthropic has published guidance for site owners who want to opt out of training but stay citeable; check their docs before you make a policy decision.</p><h2>5. PerplexityBot (Perplexity)</h2><p>Perplexity is a search engine that answers questions with cited sources. PerplexityBot is what builds the index those answers cite from.</p><p><strong>What it collects:</strong> Page content plus link graph.</p><p><strong>Blocking consequences:</strong> Removes your site from Perplexity answers. If you sell information products, courses, or B2B content, Perplexity is one of the highest-intent AI referrers currently in the wild. Blocking this bot is almost always the wrong move.</p><h2>6. CCBot (Common Crawl)</h2><p>Not an AI company directly. Common Crawl is a nonprofit that publishes a monthly open-web dataset. Every major AI training run uses Common Crawl as one of the input sources.</p><p><strong>What it collects:</strong> Full HTML. CCBot has been crawling since before AI training was a phrase people used.</p><p><strong>Blocking consequences:</strong> Removes your content from Common Crawl&#8217;s public datasets, which means removes it from the base training data for basically every open-source model and most closed ones. This is the most consequential single block on this list. It does not touch retrieval at all, so blocking it does not affect ChatGPT or Claude citations. It only affects future training.</p><h2>7. Google-Extended (Google)</h2><p>Not a crawler in the traditional sense. Google-Extended is a policy signal. If you disallow Google-Extended in robots.txt, Google will exclude your content from Bard, Gemini training, and Vertex AI grounding. Googlebot itself keeps crawling for regular search.</p><p><strong>What it collects:</strong> Nothing new. It&#8217;s a flag on the existing Googlebot crawl.</p><p><strong>Blocking consequences:</strong> Google&#8217;s AI products stop using your content for training and grounding. Google search itself is unaffected. This is the cleanest opt-out on the list.</p><h2>8. Applebot-Extended (Apple)</h2><p>Apple&#8217;s equivalent of Google-Extended. Signals whether Apple can use your content in Apple Intelligence.</p><p><strong>What it collects:</strong> Nothing new. Signal on the Applebot crawl.</p><p><strong>Blocking consequences:</strong> Apple Intelligence stops training on your content. Regular Apple search (which powers Siri suggestions and Spotlight) is unaffected.</p><h2>9. Bytespider (ByteDance)</h2><p>ByteDance&#8217;s crawler, associated with TikTok and Doubao. Historically aggressive. Bytespider has been reported to ignore robots.txt in some cases; Cloudflare and others published findings on this in 2024.</p><p><strong>What it collects:</strong> Full page HTML, often at high frequency.</p><p><strong>Blocking consequences:</strong> Almost none for Western audiences. If TikTok search and Doubao are not part of your distribution plan, this is a safe block. Watch the request volume in your logs before and after; a hard block via user agent may not stop the crawl if Bytespider is rotating IPs.</p><h2>10. Amazonbot (Amazon)</h2><p>Amazon&#8217;s crawler for Alexa answers and product-adjacent AI.</p><p><strong>What it collects:</strong> General web content, but with a bias toward product-facing pages.</p><p><strong>Blocking consequences:</strong> Removes you from Alexa answer surfaces. If your site is ecommerce or affiliate, think twice. If your site is B2B SaaS, blocking is low-consequence.</p><h2>11. Meta-ExternalAgent (Meta)</h2><p>Meta&#8217;s crawler for LLaMA training and adjacent AI products.</p><p><strong>What it collects:</strong> Web content.</p><p><strong>Blocking consequences:</strong> Content excluded from Meta&#8217;s future LLaMA training. Meta has an increasingly large open-source AI footprint, so blocking here has broader downstream effect than it looks. LLaMA fine-tunes ship from every corner of the AI ecosystem.</p><h2>12. cohere-ai (Cohere)</h2><p>Cohere is an enterprise LLM provider. Their bot crawls for embedding and RAG use in enterprise AI products.</p><p><strong>What it collects:</strong> Public site content.</p><p><strong>Blocking consequences:</strong> Limits your content&#8217;s inclusion in enterprise AI answer surfaces. If your audience is developers or engineers evaluating Cohere APIs, this bot is worth keeping allowed. Otherwise low-consequence.</p><h2>13. YouBot (You.com)</h2><p>You.com&#8217;s crawler. You.com is a smaller AI search competitor.</p><p><strong>What it collects:</strong> Full page content.</p><p><strong>Blocking consequences:</strong> Removes you from You.com answers. Low blast radius compared to the top of this list.</p><h2>What to actually do about this</h2><p>You have three reasonable policies.</p><p><strong>Allow everything.</strong> This is the default if you take no action. It maximizes your citation surface and gives you the largest possible AI-referral funnel over the next twenty-four months. It also means every crawler on this list is reading your content.</p><p><strong>Block training bots, allow retrieval bots.</strong> This is the middle path most sites should consider. Block GPTBot, CCBot, ClaudeBot&#8217;s training paths, Bytespider, Meta-ExternalAgent, and Google/Applebot-Extended. Keep ChatGPT-User, PerplexityBot, Amazonbot, and cohere-ai allowed. You stay citeable. You stop feeding the training pipeline.</p><p><strong>Block everything.</strong> Rarely correct. This is what most panic-blocking guides recommend, and it costs you the AI-referral traffic that is already starting to show up in analytics for sites that let the retrieval bots in. Do this only if you have a legal reason.</p><h2>The setup problem</h2><p>Reading a list like this is one thing. Actually implementing per-bot policy on a WordPress site is another. You have to identify user agents in your logs, decide whether a hit is verified or spoofed, write matching rules, deploy them somewhere, and audit whether they&#8217;re actually working.</p><p>That&#8217;s the exact workflow <a href="https://royalplugins.com/royal-ai-firewall/">Royal AI Firewall</a> does for you. It&#8217;s a free WordPress plugin that classifies 55 AI bots across six categories (training crawlers, retrieval bots, AI search engines, agent browsers, dataset scrapers, and traditional search indexers, so you can distinguish Googlebot from GPTBot in the same view), shows you which ones have hit your site, and gives you a per-bot policy toggle with the blocking-consequences note that this article just walked through for each bot. The dashboard lives inside wp-admin. The plugin does not require Cloudflare or any external service.</p><p>Before you install it, or any WordPress plugin, run the audit process I wrote up in <a href="https://medium.com/skillstuff/the-complete-wordpress-plugin-audit-guide-how-to-vet-every-plugin-before-you-install-it-2026-d1d129c07eaa">The Complete WordPress Plugin Audit Guide</a> on Skill Stuff. Same discipline. Read the code, check the changelog, verify the author, then install.</p><p>The full Royal Plugins catalog is at royalplugins.com. Details on Royal AI Firewall are at royalplugins.com/royal-ai-firewall/.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I Spent Two Hours Hunting Cloudflare's AI Bot Settings Last Week. They Moved. Again.]]></title><description><![CDATA[Cloudflare is a great product if you live in it. If you don't, its dashboard is a scavenger hunt. Here's what we built for the rest of us.]]></description><link>https://royalplugins.substack.com/p/i-spent-two-hours-hunting-cloudflares</link><guid isPermaLink="false">https://royalplugins.substack.com/p/i-spent-two-hours-hunting-cloudflares</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Wed, 08 Jul 2026 01:15:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last Tuesday I opened a client&#8217;s Cloudflare dashboard to check whether GPTBot was still being blocked on their marketing site. Three months earlier the toggle had been sitting under Security, then a submenu, then a sub-submenu that Cloudflare called something like &#8220;Bot Fight Mode&#8221; or &#8220;Super Bot Fight Mode.&#8221; I could not remember which.</p><p>Two hours later I found it. The setting had been renamed. It had been moved to a new section. The screenshots in my own runbook were now wrong. And when I finally clicked through, I discovered that Cloudflare had introduced a <em>third</em> interface for AI bots called &#8220;AI Audit,&#8221; which lived somewhere entirely different and did something adjacent but not identical.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This is not a complaint about Cloudflare. Cloudflare is genuinely good software. Their edge network is best-in-class. Their engineers ship faster than almost anyone.</p><p>The problem is that they ship so fast, and their surface area is so large, that if you are not living in the Cloudflare dashboard every week, you spend a real percentage of your working hours re-learning where things are.</p><p>For a WordPress site owner who touches Cloudflare maybe once a quarter, this is a tax. And it is the exact tax that led us to build <a href="https://royalplugins.com/royal-ai-firewall/">Royal AI Firewall</a>.</p><h2>The problem with the &#8220;just use Cloudflare&#8221; advice</h2><p>Every time somebody on Reddit or a Facebook group asks how to block ChatGPT from scraping their WordPress content, three replies show up within an hour. All three say the same thing. Just use Cloudflare.</p><p>The advice is not wrong. Cloudflare&#8217;s WAF and their bot management product genuinely can block AI crawlers. If you are a Cloudflare-native shop and your team lives in that dashboard, it is the right tool.</p><p>But that advice ignores four groups of people.</p><p><strong>The site owners who are not on Cloudflare at all.</strong> They are on Kinsta or Pressable or WP Engine or a shared host that has its own CDN. Telling them to add Cloudflare to solve one problem is telling them to add an entire infrastructure layer.</p><p><strong>The site owners whose host is </strong><em><strong>already</strong></em><strong> fronting Cloudflare for them.</strong> GoDaddy, Bluehost, and SiteGround all put their own Cloudflare in front of customer sites. The customer does not have access to that Cloudflare dashboard. They have access to the host&#8217;s simplified UI, which does not expose most of the bot controls. If they then add their own Cloudflare on top, they now have two Cloudflares, and neither one shows a complete picture.</p><p><strong>The site owners who are on Cloudflare but only need to configure it once a year.</strong> They know the interface will have moved by then. They know they will spend an afternoon relearning it. Every year.</p><p><strong>The agencies who need to give a client a straight answer about which AI bots are hitting their site.</strong> They cannot log into a client&#8217;s Cloudflare account to check. They need something that lives inside WordPress, that the client can see, that the client can screenshot when the marketing team asks.</p><p>For all four groups, the honest answer to &#8220;how do I control AI bots on my WordPress site&#8221; is not &#8220;use Cloudflare.&#8221; It is &#8220;install something that lives where you already work.&#8221;</p><h2>What we built</h2><p>Royal AI Firewall is a free WordPress plugin. It installs from the plugin directory, activates in one click, and shows you every AI bot hitting your site inside a single wp-admin page. The plugin recognizes 55 AI bots at launch across six categories, identified by user agent and verification method: GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, CCBot, Google-Extended, Applebot-Extended, Bytespider, Meta-ExternalAgent, agent browsers like Operator and Claude Computer Use, and the long tail of smaller ones.</p><p>For each bot you get three things.</p><p>You get a count of how many times it has hit your site in the last 24 hours, 7 days, and 30 days.</p><p>You get a per-bot policy toggle. Allow, block, or leave as-is.</p><p>You get a blocking-consequences explainer. Because blocking GPTBot means one thing and blocking ChatGPT-User means something completely different. One is a training crawler. The other is what fetches a page when someone in ChatGPT clicks a link to your article. Blocking the second one removes you from the citation graph.</p><p>That is the whole plugin. There is a first-run wizard that runs on activation, a dashboard, a settings page, and a fingerprint database that updates itself. There is no Pro tier. There is no analytics telemetry. There is no paywall on the core feature set.</p><h2>Why WordPress-native beats edge-first for this specific problem</h2><p>The AI bot problem is a <em>content</em> problem more than a <em>network</em> problem. You want to know who is reading your content, whether your content is showing up in AI answers, whether the ratio of &#8220;in&#8221; versus &#8220;out&#8221; traffic is fair, and whether any of these bots are hitting endpoints they should not be hitting.</p><p>Those are questions best answered where your content lives. That is WordPress.</p><p>Cloudflare knows a lot about what happens at the edge. It does not know which of your posts got cited in a Perplexity answer three days ago. It does not know which of your product pages an AI shopping bot has scraped seven times this week. It sees traffic. It does not see meaning.</p><p>A WordPress plugin sees both. It sees the request, and it sees the post ID the request was for. It sees who the visitor is claiming to be, and it sees which of your custom post types they hit hardest.</p><p>That is why we built inside WordPress instead of trying to compete with Cloudflare at the edge. Different tools, different jobs.</p><h2>The &#8220;vet everything before you install it&#8221; caveat</h2><p>Before you install any WordPress plugin, including this one, you should audit it.</p><p>I wrote a guide for Medium&#8217;s Skill Stuff publication last week called <a href="https://medium.com/skillstuff/the-complete-wordpress-plugin-audit-guide-how-to-vet-every-plugin-before-you-install-it-2026-d1d129c07eaa">The Complete WordPress Plugin Audit Guide</a>. It walks through the checks I run on every plugin before it goes on a client site. Author reputation, changelog frequency, code review, PHP version support, database footprint, and about a dozen other things. Same discipline applies to Royal AI Firewall. Read the source before you trust it.</p><p>The plugin is open source. The source is in the WordPress.org plugin directory. Read it, run it through Plugin Check, and decide if it belongs on your site.</p><h2>What comes next</h2><p>Royal AI Firewall is at royalplugins.com/royal-ai-firewall/. When the WordPress.org listing goes live I will follow up with a walkthrough post on the first-run wizard and the surprising bot hits I saw on my own site in the first week.</p><p>If you want a broader look at what Royal Plugins is building, the whole catalog lives at <a href="https://royalplugins.com">Royal Plugins</a>.</p><p>Cloudflare is fine. But some of us just want a settings page that stays in the same place.</p><p>RP Team</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Padlock in Your Browser Means Encrypted. It Does Not Mean Configured]]></title><description><![CDATA[At 2:14 AM on a Tuesday, my SSL certificate expired.]]></description><link>https://royalplugins.substack.com/p/browser-padlock-ssl-certificate-misconfiguration</link><guid isPermaLink="false">https://royalplugins.substack.com/p/browser-padlock-ssl-certificate-misconfiguration</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 25 May 2026 09:15:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At 2:14 AM on a Tuesday, my SSL certificate expired. By the time I checked email at 7 AM, every visitor for the past five hours had hit a full-page browser warning telling them my site was dangerous. Google had already started deindexing pages. Email clients were flagging links to my domain. The recovery took three days.</p><p>The certificate had been &#8220;valid&#8221; the day before, with the green padlock showing in every browser I tested. The padlock told me what I wanted to hear. An SSL certificate checker would have told me what I needed to know.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>What the Padlock Actually Verifies</h3><p>The padlock icon means the connection between your browser and the server is encrypted. That is it. It does not verify that the certificate is current, that the chain is complete, that the TLS version is modern, or that all subdomains are covered.</p><p>Browsers are intentionally permissive about which certificates they accept. They prioritize getting the user to the page over surfacing configuration warnings. So a certificate that expires in 24 hours shows the same green padlock as one that just renewed. A certificate with a broken intermediate chain might work in Chrome but fail on iOS Safari. A certificate using deprecated TLS 1.0 still encrypts, just badly.</p><p>The padlock is binary. The actual configuration is a spectrum.</p><h3>What Actually Goes Wrong</h3><p>Some of the silent SSL failures I have seen on real sites:</p><p><strong>Auto-renewal failures.</strong> Free certificates from Let&#8217;s Encrypt expire every 90 days. Auto-renewal is supposed to handle it. When DNS changes break the auto-renewal verification, no email goes out. The certificate just dies on schedule.</p><p><strong>Incomplete chain.</strong> Your certificate is signed by an intermediate authority, which is signed by a root. If the intermediate is missing from the server response, some browsers reject the connection. Chrome might fix it on the fly. iOS Safari often does not. Result: your site works for some visitors and breaks silently for others.</p><p><strong>Mixed content.</strong> Page loads over HTTPS, but images, scripts, or stylesheets load over HTTP. Browsers show warnings, the padlock disappears or downgrades, and form submissions can fail.</p><p><strong>Outdated TLS.</strong> Older TLS versions (1.0 and 1.1) have known vulnerabilities. Modern browsers are deprecating them. Servers that still support them work today and will start failing tomorrow.</p><p><strong>Subdomain mismatch.</strong> Your main domain has a wildcard certificate. Your blog subdomain ended up on a different server with its own setup. One subdomain works, another shows warnings.</p><p>None of these issues remove the padlock for everyone. They just create a percentage of visitors who hit broken connections, and you have no idea unless you check.</p><h3>Make This a Monthly Check</h3><p>I run my domains through an SSL certificate checker on the first of every month. The check shows the exact expiration date, chain completeness, TLS version, and cipher strength. Five seconds per domain. The 30-day buffer means even if auto-renewal silently fails, I catch it before the cert dies.</p><p>The free <a href="https://royalplugins.com/tools/ssl-checker/">Royal Plugins SSL Certificate Checker</a> runs all of these checks on any URL, with no signup. It tests the main domain plus any subdomains you specify, reports expiration in days, and flags weak ciphers or chain issues immediately.</p><p>For continuous monitoring of SSL alongside the rest of the WordPress security stack (login lockdown, security headers, file integrity, malware scanning), <a href="https://royalplugins.com/guardpress/">GuardPress</a> covers the recurring side. Use the free checker for monthly spot audits and as the first step after any DNS or hosting change.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Can Claude Edit Your Elementor Pages? Three Workflows I Actually Use]]></title><description><![CDATA[An honest breakdown of the four ways I know of, and which ones I'd put on a live site today.]]></description><link>https://royalplugins.substack.com/p/can-claude-edit-your-elementor-pages</link><guid isPermaLink="false">https://royalplugins.substack.com/p/can-claude-edit-your-elementor-pages</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 25 May 2026 05:03:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I get this question constantly from people building WordPress sites: can I just point Claude at my Elementor pages and let it do the work?</p><p>The honest answer is yes, but you have to know which workflow to pick. There are four ways I know of to edit Elementor with Claude today. I&#8217;ve personally used three of them across real client work. The fourth is interesting but I haven&#8217;t shipped it on a live site yet, and I&#8217;ll be upfront about why.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here&#8217;s the breakdown.</p><h2><strong>Workflow 1: Write in Gutenberg, Open in Elementor</strong></h2><p>This is the simplest one. You ask Claude to draft a post or page through an MCP connection. Claude writes the content directly into WordPress&#8217;s Gutenberg block editor. You then open the post in Elementor and it wraps each block as a widget.</p><p>I use this for blog posts and template-driven service pages. Anywhere the layout is consistent and the content is what matters, this workflow gets a draft up in seconds.</p><p>Where it breaks: pages built natively in Elementor from the start have empty post content. Gutenberg has nothing to write into. So if you&#8217;ve designed a page widget-by-widget inside Elementor, this approach won&#8217;t apply.</p><p>Use it for content-first work, skip it for design-first work.</p><h2><strong>Workflow 2: Build the Layout Yourself, Let Claude Handle the Copy</strong></h2><p>For high-stakes marketing pages, I still build the layout manually. Container model, atomic widgets where the design calls for it, spacing tuned by eye. Then I ask Claude to draft the headlines, body copy, CTAs, and FAQ answers, and I paste those into the relevant widgets.</p><p>This is the most labor-intensive of the three I use, but it&#8217;s the right call when pixel precision matters. Humans are still better than AI at non-trivial layout decisions. I reserve this for landing pages where every conversion point pays for the time.</p><p>The split works because copy and layout are different problems. You don&#8217;t need AI for the part it&#8217;s worst at.</p><h2><strong>Workflow 3: Clone an Existing Page and Mutate It (Royal MCP)</strong></h2><p>This is the one I reach for most often, and it&#8217;s the one I built a plugin to make reliable.</p><p>The idea: instead of asking AI to build something new, you point it at a page that already works and ask it to make a variant. Claude reads the page outline, clones the page, regenerates the internal element IDs so nothing collides, swaps text across the widget types it understands (headings, buttons, text editors, testimonials, FAQs), swaps image URLs where you tell it to, and saves a draft for you to review.</p><p>A concrete example. My services page for one city converts well. I want a version for a different city. I tell Claude:</p><p>&#9614; Clone the New York services page. Replace &#8220;New York&#8221; with &#8220;Los Angeles&#8221; everywhere. Swap the hero image for the LA skyline photo I uploaded last week. Save as a draft.</p><p>The MCP runs the clone, runs the text replace, runs the image swap. A draft is ready in seconds. I open it in Elementor, refine anything that needs a human touch, and publish.</p><p>Why this approach actually works: nothing tries to decode the Elementor page-builder JSON from scratch. The clone copies bytes. The replacements only touch widget types the tool knows how to handle, and they tell you exactly how many replacements happened. If zero things matched, you get a clear &#8220;0 replacements&#8221; response instead of a silently broken page.</p><p>I built <a href="https://wordpress.org/plugins/royal-mcp/">Royal MCP</a> for exactly this workflow. It&#8217;s free on the <a href="http://wordpress.org/">WordPress.org</a> plugin directory, capability-gated, runs on OAuth, and ships among the first cohort of MCP plugins reviewed by the <a href="http://wp.org/">wp.org</a> team.</p><h2><strong>Workflow 4: Generate Elementor JSON From a Prompt (I Haven&#8217;t Used This)</strong></h2><p>This is the workflow I haven&#8217;t put into client work, and I want to be honest about that.</p><p>The idea is exciting: describe a page in plain English, AI generates the underlying Elementor JSON, the page materializes. A few projects are chasing it.</p><p><strong>Two worth knowing about:</strong></p><ol><li><p>Angie is the official plugin from the Elementor team. It&#8217;s on <a href="http://wordpress.org/">WordPress.org</a>. Current rating is 2.4 stars, and the negative reviews tell you which workflows are still rough. I haven&#8217;t installed it on a production site. If you want to try it, read the reviews first.</p></li><li><p>msrbuilds/elementor-mcp is a community project on GitHub with around 316 stars and active development on a roughly two-to-three-week release cycle. The tool surface is the most ambitious I&#8217;ve seen: over 100 tools spanning page management, layout, widgets, templates, and theme builder. I&#8217;ve read through the repo and the code looks serious. I haven&#8217;t run it on a client site yet because the distribution is GitHub-only (no <a href="http://wordpress.org/">WordPress.org</a> security review before installation) and the auth model uses WordPress Application Passwords, which means a leaked credential gives broader access than just the MCP routes.</p></li></ol><p>If you&#8217;re tinkering or building demos, both are worth exploring. For production work where a broken page costs real money, I&#8217;m still using clone-and-mutate.</p><p><strong>How to Pick</strong></p><p>It actually comes down to the task, not the tooling.</p><ul><li><p>Content-first page with a template: Workflow 1, write in Gutenberg, open in Elementor.</p></li><li><p>One-off marketing page where design matters: Workflow 2, build the layout yourself, let Claude handle the copy.</p></li><li><p>Variants of a page that already works: Workflow 3, clone-and-mutate with Royal MCP.</p></li><li><p>Demos, experiments, or you just want to see what&#8217;s possible: Workflow 4, try Angie or msrbuilds and see how far you get.</p></li></ul><p>The guiding principle I keep coming back to: start with something that already works unless you specifically need to invent from scratch. AI is better at customizing than inventing. The whole reason clone-and-mutate works so well is that you&#8217;re handing the AI a problem it can succeed at.</p><p>If you want the longer version with the technical reasoning behind each workflow, setup steps for Royal MCP, and the FAQ I&#8217;ve built up from these conversations, I wrote the full breakdown on the Royal Plugins blog: Editing Elementor with Claude: The Four Workflows That Work Today (<a href="https://royalplugins.com/blog/editing-elementor-with-claude-four-workflows/">https://royalplugins.com/blog/editing-elementor-with-claude-four-workflows/</a>).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[A+ on Speed and F on Security Headers. The Two Are Not the Same Thing]]></title><description><![CDATA[I had spent six weeks tuning my site for performance.]]></description><link>https://royalplugins.substack.com/p/pagespeed-vs-security-headers-different-grades</link><guid isPermaLink="false">https://royalplugins.substack.com/p/pagespeed-vs-security-headers-different-grades</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Thu, 21 May 2026 09:10:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I had spent six weeks tuning my site for performance. PageSpeed Insights moved from a 71 to a 97. Lighthouse showed green across the board. I felt good about my site. Then a security researcher messaged me to say my Content Security Policy was missing, and I ran my domain through a security headers checker for the first time. The grade came back as F.</p><p>Performance and security are graded by completely different tools, and most site owners only check one of them. The result is sites that are fast and wide open at the same time.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Why PageSpeed Does Not Touch Security Headers</h3><p>PageSpeed Insights measures rendering performance. Time to first byte, largest contentful paint, cumulative layout shift, total blocking time. These tell you how fast your site loads. They tell you nothing about whether your site is configured against the most common web attacks.</p><p>Security headers are a separate concern entirely. They are HTTP response headers your server sends with every page. Browsers read those headers and use them to decide what is allowed: which scripts can run, whether the site can be embedded in iframes, how cookies should be handled, what referrer info gets leaked.</p><p>A site can return Content Security Policy headers, X-Frame-Options, Strict-Transport-Security, X-Content-Type-Options, and Referrer-Policy, or it can return none of them. Either way, PageSpeed scores the same. Security graders do not care about your speed.</p><h3>What an F Actually Means</h3><p>Six core security headers, all missing. Six separate attack vectors left open by default. None of them flagged by performance tools or by my caching plugin or by my SEO plugin.</p><p><strong>Content-Security-Policy missing.</strong> Any script from any source could execute on my pages. Most XSS attacks rely on this gap to inject malicious scripts.</p><p><strong>Strict-Transport-Security missing.</strong> Even though I had SSL, browsers were not required to use it. A user on public WiFi could be intercepted on the initial HTTP request before the redirect.</p><p><strong>X-Frame-Options missing.</strong> My entire site could be embedded in an invisible iframe and used for clickjacking on a phishing page.</p><p><strong>X-Content-Type-Options missing.</strong> Browsers were free to guess file types. Attackers exploit this to run uploaded files as scripts.</p><p><strong>Referrer-Policy missing.</strong> Full URL paths, including any session tokens in query parameters, leaked to every external link.</p><p><strong>Permissions-Policy missing.</strong> Camera, microphone, and geolocation access were not restricted, even on pages that had no business asking for those permissions.</p><h3>The Fix Took 15 Minutes</h3><p>I added all six headers through my hosting panel&#8217;s custom header settings. On WordPress with shared hosting, the same fix is a few lines in .htaccess or a security plugin that handles headers.</p><p>After deploying, I ran the same security headers check again. The grade jumped from F to A. Same site, same content, same hosting. Just six lines of configuration.</p><p>The whole thing took less time than my morning coffee. Months of speed optimization had not affected security at all, and 15 minutes of header configuration had not affected speed.</p><h3>Treat Speed and Security as Two Separate Audits</h3><p>Whatever performance tool you run weekly, run a security headers check on the same cadence. They take seconds. They surface entirely different problems.</p><p>The free <a href="https://royalplugins.com/tools/http-headers-checker/">Royal Plugins HTTP Headers Checker</a> checks 8 security headers, gives a weighted grade, and shows exactly what is present and what is missing. No signup.</p><p>For a hardening setup that maintains security headers across deploys, plus the rest of the WordPress security stack (login lockdown, file integrity, 2FA, malware scanning), <a href="https://royalplugins.com/guardpress/">GuardPress</a> handles continuous protection. Start with the free header check to see your current grade.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Plugin That Hacked My Site Had 10,000 Active Installs]]></title><description><![CDATA[A reader emailed me three months ago to say my site was redirecting visitors to a fake pharmacy page.]]></description><link>https://royalplugins.substack.com/p/popular-wordpress-plugin-vulnerability-scan</link><guid isPermaLink="false">https://royalplugins.substack.com/p/popular-wordpress-plugin-vulnerability-scan</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 18 May 2026 05:07:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A reader emailed me three months ago to say my site was redirecting visitors to a fake pharmacy page. I checked on desktop, the site looked fine. I checked on mobile, the redirect fired immediately. The source was a WordPress plugin I had been running for over a year. It had 10,000 active installs and a 4.5-star rating. None of that meant anything.</p><p>Plugin install count is the worst proxy for plugin safety, and most site owners use it as the only signal. A WordPress plugin security scanner checks the things install count cannot.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Why Install Count Means Nothing for Security</h3><p>The reasoning behind &#8220;if it has 10,000 installs, it must be safe&#8221; goes like this: if there were a problem, someone would have caught it by now. The math is wrong.</p><p>Bug reports happen when a user notices the bug. Most plugin vulnerabilities are silent. Cross-site scripting, SQL injection, broken access control. None of these change the user-facing behavior of the plugin. The plugin keeps doing its job. The vulnerability sits there unnoticed until a researcher finds it or an attacker exploits it.</p><p>By the time an exploit is public, the gap between disclosure and patch is the dangerous window. A plugin with 10,000 installs that gets disclosed on a Monday and patched on a Friday means 10,000 sites are exposed for four days. Attackers automate scans for known-vulnerable plugin versions and hit thousands of sites in hours.</p><h3>What Happened to My Site</h3><p>The plugin I was running, a simple social sharing widget, had a public XSS disclosure two weeks before my site got hit. I never saw the disclosure because I was not subscribed to any vulnerability feed. The plugin developer had not pushed a patch. Attackers scanned for sites running that exact version, injected malicious code through the XSS, and added a mobile-only redirect.</p><p>Recovery took two days. Restore from backup, identify the entry point, remove the compromised plugin, scan every file for residual injections, change all passwords, resubmit to Google for a malware review.</p><h3>What a Plugin Vulnerability Scanner Actually Checks</h3><p>A free plugin security scanner cross-references each plugin you have installed against public vulnerability databases like WPScan and CVE records. The information you get back is more useful than star ratings:</p><p><strong>Known vulnerabilities by version.</strong> If you are running plugin X version 2.4.1 and version 2.4.2 patched a critical XSS, the scanner tells you upgrade is required.</p><p><strong>Last update date.</strong> Plugins not updated in over a year are higher risk regardless of install count. The WordPress core changes constantly, and unmaintained plugins drift out of compatibility.</p><p><strong>Active install trend.</strong> Plugins losing installs faster than they gain them often signal abandonment or trust issues.</p><p><strong>Public security advisories.</strong> Disclosures filed against the plugin in the last 12 months, with severity scores.</p><h3>Make This Pre-Install and Recurring</h3><p>Run the scan before installing any plugin. Run it monthly across all installed plugins to catch newly disclosed vulnerabilities in things you already trust.</p><p>The free <a href="https://royalplugins.com/tools/wordpress-plugin-security-scanner/">Royal Plugins Plugin Security Scanner</a> analyzes any wp.org plugin source against 20 security rules and generates a security badge plugin developers can display on their READMEs. No signup, no install, runs in under a minute per plugin.</p><p>For continuous monitoring of plugin vulnerabilities on a live site, including alerts when a disclosure drops for a plugin you have installed, <a href="https://royalplugins.com/guardpress/">GuardPress</a> handles the recurring side. Use the free scanner for the pre-install vetting and one-off audits.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Your Security Plugin Doesn't See What an Attacker Sees]]></title><description><![CDATA[I ran Wordfence on my WordPress site for four years.]]></description><link>https://royalplugins.substack.com/p/wordpress-security-plugin-blind-spot-external-scan</link><guid isPermaLink="false">https://royalplugins.substack.com/p/wordpress-security-plugin-blind-spot-external-scan</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Fri, 15 May 2026 11:03:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I ran Wordfence on my WordPress site for four years. Premium tier. Real-time scanning. Daily email reports. I assumed I was covered. Then I ran an external WordPress security scanner that looks at the site from the outside the way bots do, and it flagged five issues Wordfence had never mentioned.</p><p>Both tools were doing their jobs. They were just doing different jobs, and most site owners do not realize there is a gap between them.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Internal Scanners and External Scanners Are Not the Same</h3><p>A security plugin running on your WordPress install audits what it can see from inside the server. File integrity, login attempts, plugin versions, malware signatures, database changes. This is valuable. It is not the same as auditing what your site exposes to the public internet.</p><p>An external scanner connects to your domain the way a bot or attacker would. It does not have access to your file system. It cannot read your wp-config.php. What it sees is the rendered HTML, the HTTP response headers, the publicly accessible URLs, and the metadata your server happens to broadcast.</p><p>Those are the things attackers actually use to pick targets. Plugin scanners do not check most of them because they are not visible from inside the server.</p><h3>What the External Scan Found</h3><p>Five issues my premium security plugin never flagged:</p><p><strong>WordPress version exposed.</strong> My pages broadcast the exact WordPress version in the HTML source. Attackers maintain databases of version-specific exploits, so this is the first thing automated scanners look for.</p><p><strong>XML-RPC endpoint open.</strong> Wordfence saw login attempts and blocked some of them, but the XML-RPC endpoint itself was still publicly reachable. Attackers use it for amplified brute force and DDoS.</p><p><strong>Five missing security headers.</strong> No Content-Security-Policy, no Strict-Transport-Security, no X-Frame-Options, no X-Content-Type-Options, no Referrer-Policy. Each missing header is a separate attack vector. None of them are checked by internal plugins because they are server-level configuration, not WordPress configuration.</p><p><strong>Directory browsing enabled.</strong> Anyone could navigate to /wp-content/uploads/ and see a listing of every file ever uploaded. This reveals file paths, sensitive filenames, and structure that helps attackers plan further probes.</p><p><strong>WP_DEBUG left on.</strong> A leftover from a troubleshooting session months earlier. Error messages including file paths and database queries were being exposed in production.</p><p>Total fix time once I knew what to fix: about 20 minutes.</p><h3>Why You Need Both Kinds of Scanner</h3><p>The internal plugin caught real-time things the external scanner cannot see: brute force login attempts, file changes, malware signatures in uploaded content. The external scanner caught configuration issues the internal plugin had no visibility into.</p><p>Either tool alone has blind spots. Together, they cover most of what you actually need.</p><p>If you only run an internal plugin today, schedule a monthly external scan as a complement. The free <a href="https://royalplugins.com/tools/wordpress-security-scanner/">Royal Plugins WordPress Security Scanner</a> runs 12 WordPress-specific checks from outside, in under a minute, with no signup or installation.</p><p>For a hardening layer that covers the WordPress-side controls an external scan cannot reach (login lockdown, 2FA, firewall rules, file integrity), <a href="https://royalplugins.com/guardpress/">GuardPress</a> is the internal complement to the external scan. Run the external check first to see what is publicly visible, then close those gaps with hardening.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[My Theme Said It Had Built-In Schema. Google Was Ignoring It the Whole Time]]></title><description><![CDATA[For eight months I wondered why my articles never got rich results in Google.]]></description><link>https://royalplugins.substack.com/p/theme-schema-markup-broken-rich-results</link><guid isPermaLink="false">https://royalplugins.substack.com/p/theme-schema-markup-broken-rich-results</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 11 May 2026 09:59:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For eight months I wondered why my articles never got rich results in Google. Competitors with weaker content showed star ratings and FAQ dropdowns in search. My listings were plain blue links. The theme I bought said it included &#8220;built-in SEO schema markup,&#8221; and I trusted that line on the sales page. Then I ran a schema markup validator on my own site and got the answer in 30 seconds.</p><p>The theme was outputting JSON-LD with three separate errors. Google had been silently ignoring my structured data the entire time.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>What Built-In Schema Actually Means</h3><p>Themes that advertise schema markup typically generate Article, BlogPosting, or WebPage schema automatically. Sounds good. The problem is that &#8220;automatic&#8221; does not mean &#8220;valid.&#8221;</p><p>Schema markup has strict requirements. Article schema requires headline, image, datePublished, and author. The author has to be a Person or Organization object, not a plain text string. Dates have to be in ISO 8601 format. Images have to be reachable URLs.</p><p>A theme that hardcodes the author as a string (&#8221;By Jane Smith&#8221;) instead of a Person object outputs technically invalid schema. The page looks correct in the browser. The schema fails Google&#8217;s parser. Zero rich results.</p><p>These bugs are silent. There is no error message. Search Console will not warn you. Your theme dashboard will not tell you anything is wrong because the theme thinks it did its job.</p><h3>The Three Errors on My Own Site</h3><p>When I ran the validator on my homepage, here is what it surfaced:</p><p><strong>Error 1: Author was a plain string.</strong> The theme output <code>"author": "Royal Plugins"</code> instead of <code>"author": {"@type": "Organization", "name": "Royal Plugins"}</code>. Required structure was missing.</p><p><strong>Error 2: Date format was wrong.</strong> The theme used <code>"datePublished": "April 2026"</code> instead of <code>"datePublished": "2026-04-15"</code>. ISO 8601 is required. Anything else fails.</p><p><strong>Error 3: Image property was missing entirely.</strong> The theme generated featured images for visual display but never wrote them into the JSON-LD. Article schema requires at least one image.</p><p>Three quiet failures. Eight months of zero rich results.</p><h3>How I Fixed It</h3><p>I disabled the theme&#8217;s built-in schema and installed a dedicated schema plugin. I configured the plugin to output valid Article schema with all required properties. Then I revalidated every key page to confirm zero errors.</p><p>Within three weeks, Google started showing enhanced listings. Average CTR on page-one rankings rose from 4.1% to 7.3%. I did not write any new content. I did not build a single backlink. The only change was repairing the structured data.</p><h3>Make Schema Validation Part of Your Workflow</h3><p>Validate after every theme update, plugin install, or template change. Themes and plugins overwrite or duplicate structured data without warning, and silent failures can cost you months of rich result eligibility.</p><p>The free <a href="https://royalplugins.com/tools/schema-validator/">Royal Plugins Schema Markup Validator</a> parses any URL or raw JSON-LD, checks 16 schema types, flags missing required fields, and surfaces deprecated properties. No signup.</p><p>If you want schema validation built into a broader SEO workflow that also catches GEO score, AI citation issues, and meta tag problems, <a href="https://royalplugins.com/seobolt/">SEObolt</a> includes structured data audits as part of its core scan. Start with the free validator to see what your current setup is actually outputting.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I Stopped Writing Titles That Look Good and Started Writing Titles That Fit]]></title><description><![CDATA[For two years I followed the standard SEO advice on titles.]]></description><link>https://royalplugins.substack.com/p/serp-preview-pixel-width-vs-character-count</link><guid isPermaLink="false">https://royalplugins.substack.com/p/serp-preview-pixel-width-vs-character-count</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Fri, 08 May 2026 10:46:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For two years I followed the standard SEO advice on titles. Keep them under 60 characters. Put the keyword near the front. Add a benefit. I did all of that, and my click-through rates were still bad. I had a post ranking position three for a competitive keyword, pulling 400 impressions per day, getting eight clicks. That is a 2% CTR on real estate most sites would kill for.</p><p>The problem was not the words. The problem was that 60 characters of &#8220;good&#8221; advice does not match what Google actually displays. A SERP preview tool showed me exactly what was happening.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Character Count Is a Bad Proxy for Pixel Width</h3><p>Google does not truncate titles by character count. It truncates by pixel width, which depends on the specific letters in your title. The word &#8220;millimeter&#8221; is 10 characters of skinny letters. The word &#8220;WordPress&#8221; is 9 characters but takes up significantly more space because of the W and the capital P.</p><p>Most SEO tools enforce a character limit (usually 60). The actual cutoff is around 580 pixels on desktop and around 920 pixels for descriptions. A title under 60 characters can still get truncated if the letters are wide. A title slightly over 60 characters can fit if the letters are narrow.</p><p>The only way to know is to render the title in a tool that simulates Google&#8217;s actual width.</p><h3>What I Saw When I Previewed My Own Post</h3><p>My title read: &#8220;Everything You Need to Know About WordPress Security Best Practices for Your Website.&#8221; Sixty-eight characters. Within range of most &#8220;guidelines.&#8221;</p><p>Google was rendering it as: &#8220;Everything You Need to Know About WordPress Secur...&#8221;</p><p>The most important words, &#8220;Security Best Practices,&#8221; were invisible. Visitors scanning the SERP saw a title about everything you need to know about WordPress and nothing telling them what they would actually learn. So they clicked the result above mine that was clearer.</p><p>I rewrote the title to &#8220;WordPress Security: 5 Fixes You Can Do in 10 Minutes.&#8221; Fifty-three characters. The full title rendered. Within one week the CTR jumped from 2% to 8.4%. Same content, same ranking, same audience. Different title.</p><h3>A Real SERP Preview Saves You Hours of Guessing</h3><p>Once you see the rendered version, the rewrite happens fast. The hard part is realizing the title was the problem in the first place. Most people blame ranking, content, or competition when it is actually the listing.</p><p>Things to test in a SERP preview:</p><p><strong>Truncation.</strong> Does the title or description cut off mid-thought?</p><p><strong>Keyword placement.</strong> Is the primary keyword visible in the rendered portion, not the truncated portion?</p><p><strong>Hook strength.</strong> Does the listing give a reason to click compared to the results above and below?</p><p><strong>Mobile vs desktop.</strong> Mobile cuts off sooner. A title that fits on desktop may truncate on mobile, and mobile is now over 60% of search traffic.</p><p>The free <a href="https://royalplugins.com/tools/serp-preview/">Royal Plugins SERP Preview Tool</a> renders desktop and mobile simulations side by side. Type your title, URL path, and meta description, see the pixel-accurate result.</p><p>If you have ten posts ranking on page one with low CTR, run each one through a SERP preview before doing anything else. The fix is usually thirty seconds of editing. For a full SEO audit that flags low-CTR pages alongside title issues, <a href="https://royalplugins.com/seobolt/">SEObolt</a> catches them at scale, but the free preview tool is where most title fixes start.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Your SEO Plugin Is Lying About Your Meta Tags. Here is How I Caught It.]]></title><description><![CDATA[Three months ago I was certain my meta tags were perfect.]]></description><link>https://royalplugins.substack.com/p/your-seo-plugin-is-lying-about-your</link><guid isPermaLink="false">https://royalplugins.substack.com/p/your-seo-plugin-is-lying-about-your</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Tue, 05 May 2026 04:00:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Three months ago I was certain my meta tags were perfect. Yoast told me so. Every page had a green light, every title was within the character limit, every description was the right length. Then I started losing rankings I had held for two years, and I went looking for what my SEO plugin was missing.</p><p>What I found: the green lights from your SEO plugin are not telling you what Google sees. They are telling you what your SEO plugin <em>thinks</em> it told the page to output. Those are two completely different things, and a free meta tag checker is the only way to spot the gap.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Why SEO Plugin Dashboards Are Misleading</h3><p>Your SEO plugin does one job in the meta tag department. It generates a title and description and inserts them into the page header. What it does not do is verify those values survive every other piece of code that runs after it.</p><p>Here is what silently overrides your SEO plugin output:</p><p><strong>Themes with their own SEO settings.</strong> Many themes inject their own meta tags after your plugin runs. The result is duplicate or conflicting tags that Google ignores.</p><p><strong>Caching plugins.</strong> Some caching layers serve stale meta tags from a previous version of the page. You update the description; the cache serves the old one for hours.</p><p><strong>AMP plugins.</strong> AMP versions of your pages often pull from completely separate meta fields your SEO plugin has no idea exist.</p><p><strong>Page builders.</strong> Elementor, Divi, and Beaver Builder all have their own SEO modules. If they are turned on, they may overwrite or duplicate your global SEO settings.</p><p><strong>Third-party plugins.</strong> Anything that adds OG tags, Twitter cards, or canonical URLs can stomp on your SEO plugin&#8217;s work without warning.</p><p>Your SEO plugin sees none of this. It checks the values in its own settings and reports back. The page Google actually crawls is a different document.</p><h3>What I Found When I Looked at the Real HTML</h3><p>I started using a free meta tag checker that bypasses the SEO plugin entirely. It fetches the page the way Google does, parses the rendered HTML, and shows every meta tag actually present.</p><p>Running my own homepage through it surfaced four problems Yoast had never mentioned:</p><p>A duplicate canonical tag pointing to two different URLs.</p><p>An Open Graph image with a URL that returned a 404.</p><p>Two robots meta tags, one of which inherited a noindex from a staging environment three months earlier.</p><p>A Twitter card type set to &#8220;summary&#8221; while my theme was also outputting &#8220;summary_large_image,&#8221; causing Twitter to render the wrong preview half the time.</p><p>None of those issues appeared in any plugin dashboard. They were only visible in the rendered output.</p><h3>Make This a Quarterly Check</h3><p>If your SEO plugin is the only thing you use to audit meta tags, you have a blind spot. Run an external check at least once a quarter and after any theme update, plugin install, or page builder upgrade.</p><p>The free <a href="https://royalplugins.com/tools/meta-tag-checker/">Royal Plugins Meta Tag Checker</a> reads the live HTML of any URL and surfaces every meta tag organized by category: SEO, social, technical. It flags duplicates, broken values, and missing required tags. No signup. No usage limit.</p><p>For a deeper workflow that audits meta tags alongside schema, GEO score, and AI search readiness, <a href="https://royalplugins.com/seobolt/">SEObolt</a> covers the rest of the SEO stack. Start with the free checker first to see what is on your page right now.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Stop Paying $200/Year for a WordPress Affiliate Link Plugin]]></title><description><![CDATA[Pretty Links Pro costs $199/year.]]></description><link>https://royalplugins.substack.com/p/free-wordpress-affiliate-link-plugin-royal-links</link><guid isPermaLink="false">https://royalplugins.substack.com/p/free-wordpress-affiliate-link-plugin-royal-links</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 13 Apr 2026 02:07:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gxDW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gxDW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gxDW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 424w, https://substackcdn.com/image/fetch/$s_!gxDW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 848w, https://substackcdn.com/image/fetch/$s_!gxDW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 1272w, https://substackcdn.com/image/fetch/$s_!gxDW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gxDW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png" width="1456" height="471" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:471,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://royalplugins.substack.com/i/194027218?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gxDW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 424w, https://substackcdn.com/image/fetch/$s_!gxDW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 848w, https://substackcdn.com/image/fetch/$s_!gxDW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 1272w, https://substackcdn.com/image/fetch/$s_!gxDW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a25c903-916d-484f-b6fc-b09186ebee0f_2413x781.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Pretty Links Pro costs $199/year. ThirstyAffiliates Pro runs $149/year. BetterLinks Pro is $79/year. They all gate the features you actually need behind a paywall: geo-targeting, A/B split testing, automatic keyword linking, QR codes, and device-based redirects.</p><p>What if all of that was free?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>The WordPress Affiliate Link Plugin That Charges Nothing</h3><p><a href="https://wordpress.org/plugins/royal-links/">Royal Links</a> is a free affiliate link management plugin by <a href="https://royalplugins.com">Royal Plugins</a> that includes every feature its competitors lock behind premium tiers. No &#8220;lite&#8221; version, no feature gates, no upsells. Version 2.0 shipped everything for $0.</p><p>Here&#8217;s what you get without paying a cent:</p><p><strong>Geo-targeting redirects.</strong> Send visitors to different affiliate URLs based on their country. Amazon affiliates running multi-region programs can route US visitors to amazon.com and UK visitors to amazon.co.uk automatically.</p><p><strong>A/B split testing.</strong> Test multiple destination URLs and track which converts best. Real conversion data instead of guessing which landing page works.</p><p><strong>QR code generation.</strong> Create downloadable QR codes for any link with scan tracking built in. Print marketing, product packaging, business cards.</p><p><strong>Automatic keyword linking.</strong> Define keywords and Royal Links auto-converts them into affiliate links across your content. Set max occurrences per keyword to keep it natural.</p><p><strong>Device-based redirects.</strong> Route desktop, mobile, and tablet users to different destinations. Send mobile visitors to an app store while desktop visitors hit a landing page.</p><p><strong>Time-based redirects.</strong> Schedule destination swaps automatically. Run a Black Friday deal from November 25 to December 1, then redirect to the regular page.</p><h3>What Else Is Included</h3><p>Beyond the headline features, Royal Links handles the day-to-day link management that affiliate marketers need:</p><p><strong>Branded short URLs</strong> on your own domain. Clean links that build trust instead of ugly tracking URLs.</p><p><strong>Click analytics</strong> with browser, device, OS, referrer, and country data. A dashboard widget shows period-over-period comparison at a glance.</p><p><strong>Broken link checker</strong> that monitors your destinations and flags dead links before they cost you commissions.</p><p><strong>FTC affiliate disclosure notices</strong> that display automatically. Stay compliant without manually adding disclaimers to every post.</p><p><strong>Password-protected links</strong> for exclusive deals and gated content.</p><p><strong>301, 302, and 307 redirects</strong> with nofollow, sponsored, and UGC attribute options.</p><h3>Switching Is Easy</h3><p>Already using Pretty Links, ThirstyAffiliates, or BetterLinks? The built-in migration wizard imports your links, categories, and click history in one click. Existing short URLs keep working.</p><h3>No Catch</h3><p>There is no premium tier. There is no paid upgrade path. Every feature listed above ships in the free plugin on <a href="https://wordpress.org/plugins/royal-links/">WordPress.org</a>.</p><p>More free WordPress tools at <a href="https://royalplugins.com">royalplugins.com</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Accessibility Overlays Are Hurting Your Website (And What to Use Instead)]]></title><description><![CDATA[Over 1,000 accessibility professionals have signed a statement condemning accessibility overlays.]]></description><link>https://royalplugins.substack.com/p/free-wordpress-accessibility-plugin-royal-access</link><guid isPermaLink="false">https://royalplugins.substack.com/p/free-wordpress-accessibility-plugin-royal-access</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 13 Apr 2026 01:24:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QBsJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QBsJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 424w, https://substackcdn.com/image/fetch/$s_!QBsJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 848w, https://substackcdn.com/image/fetch/$s_!QBsJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 1272w, https://substackcdn.com/image/fetch/$s_!QBsJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QBsJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png" width="772" height="250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:772,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18066,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://royalplugins.substack.com/i/194024474?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QBsJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 424w, https://substackcdn.com/image/fetch/$s_!QBsJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 848w, https://substackcdn.com/image/fetch/$s_!QBsJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 1272w, https://substackcdn.com/image/fetch/$s_!QBsJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c085-5819-4a53-9a28-a3ab9873f3aa_772x250.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Over 1,000 accessibility professionals have signed a statement condemning accessibility overlays. The FTC has fined overlay providers for deceptive practices. Lawsuits against sites using overlays have increased, not decreased. Yet overlay companies continue to sell the promise that a single line of JavaScript will make your site compliant.</p><p>It won&#8217;t. And if you&#8217;re using one, you might be making things worse.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>What Overlays Actually Do Wrong</h3><p>Traditional accessibility overlays reparse your entire DOM, inject AI-generated ARIA attributes, and interfere with screen readers. Users who rely on assistive technology have repeatedly documented how overlays break the tools they depend on. The overlay sits between the user and your content, creating conflicts instead of removing barriers.</p><p>The core problem is philosophical. Overlays try to fix your site from the outside by overriding what the browser renders. Real accessibility comes from building it into the page itself.</p><h3>A WordPress Accessibility Plugin That Isn&#8217;t an Overlay</h3><p><a href="https://wordpress.org/plugins/royal-access/">Royal Access</a> takes the opposite approach. Built by <a href="https://royalplugins.com">Royal Plugins</a>, it&#8217;s a free WordPress accessibility plugin that gives visitors a floating toolbar with 14 controls to customize their browsing experience. Font size scaling, high contrast modes, dark mode, a bundled dyslexia-friendly font (OpenDyslexic), spacing adjustments, a reading guide, big cursor, animation controls, and more.</p><p>The key difference: Royal Access applies CSS classes based on user preferences. It doesn&#8217;t reparse the DOM. It doesn&#8217;t inject automated ARIA. It doesn&#8217;t interfere with screen readers. It works WITH assistive technology instead of against it.</p><h3>What Happens Automatically</h3><p>Beyond the toolbar, Royal Access applies four code-level fixes server-side through WordPress hooks:</p><p><strong>Skip-to-content link</strong> so keyboard users can bypass navigation.</p><p><strong>Focus indicators</strong> with consistent outlines on all interactive elements.</p><p><strong>Viewport zoom fix</strong> that removes restrictive user-scalable=no tags.</p><p><strong>Screen reader context</strong> added to &#8220;Read more&#8221; links with the post title.</p><p>No user action needed. These fixes apply automatically on activation.</p><h3>Built for Privacy</h3><p>All user preferences are stored in localStorage. No cookies, no server calls, no external dependencies. The entire frontend weighs under 60KB. The OpenDyslexic font only loads when a visitor activates it.</p><p>The admin panel includes a WCAG contrast checker, an accessibility statement generator, and an 8-item checklist showing which features are active. Everything is free with no premium tier, no account required, and no SaaS subscription.</p><h3>The Right Way Forward</h3><p>No plugin makes a site fully WCAG compliant on its own. That requires manual auditing, semantic HTML, proper alt text, and ongoing effort. But a tool that helps visitors customize their experience while applying real code-level fixes is a meaningful step in the right direction.</p><p>Install <a href="https://wordpress.org/plugins/royal-access/">Royal Access</a> from the WordPress plugin directory. It takes about two minutes. More WordPress tools at <a href="https://royalplugins.com">royalplugins.com</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Your WordPress Backup Strategy Is Probably Wrong. Here's What Actually Works.]]></title><description><![CDATA[Most WordPress backup solutions share the same problem: they&#8217;re overcomplicated.]]></description><link>https://royalplugins.substack.com/p/free-wordpress-backup-plugin-sitevault</link><guid isPermaLink="false">https://royalplugins.substack.com/p/free-wordpress-backup-plugin-sitevault</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 13 Apr 2026 01:19:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZFqL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZFqL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 424w, https://substackcdn.com/image/fetch/$s_!ZFqL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 848w, https://substackcdn.com/image/fetch/$s_!ZFqL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 1272w, https://substackcdn.com/image/fetch/$s_!ZFqL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZFqL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png" width="772" height="250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:772,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85843,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://royalplugins.substack.com/i/194024228?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZFqL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 424w, https://substackcdn.com/image/fetch/$s_!ZFqL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 848w, https://substackcdn.com/image/fetch/$s_!ZFqL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 1272w, https://substackcdn.com/image/fetch/$s_!ZFqL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F978883ad-3ee4-4904-9e74-65ea5beb0eba_772x250.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most WordPress backup solutions share the same problem: they&#8217;re overcomplicated. Dozens of settings, confusing scheduling interfaces, storage configurations that require a sysadmin to decipher. By the time you&#8217;ve figured out the setup, you&#8217;re not even sure your backups would work when you actually need them.</p><p>That&#8217;s not a backup strategy. That&#8217;s a liability.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>What a WordPress Backup Plugin Should Actually Do</h3><p>A backup plugin has one job. Take a snapshot of your site, store it somewhere safe, and let you restore it fast when things go wrong. Plugin updates that break your site, hacked databases, hosting failures, accidental deletions. These happen. The question is whether you can recover in minutes or spend days rebuilding from scratch.</p><p><a href="https://wordpress.org/plugins/sitevault-backup-restore-migration/">SiteVault</a> is a free WordPress backup plugin by <a href="https://royalplugins.com">Royal Plugins</a> that strips away the complexity. Install it, pick your cloud storage, set a schedule, and forget about it until you need it.</p><h3>How SiteVault Keeps It Simple</h3><p>The free lite version gives you 30 manual backups with no account required and no external dependencies. The Pro version ($49/year) unlocks automated scheduling and cloud storage.</p><p>Here&#8217;s what you get across both tiers:</p><p><strong>Cloud storage to 5 providers.</strong> Google Drive, Dropbox, Amazon S3, OneDrive, and FTP/SFTP. Store backups in multiple locations for redundancy.</p><p><strong>Incremental backups.</strong> Only changed files get backed up after the first full snapshot. This saves storage space and reduces server load on shared hosting.</p><p><strong>AES-256 encryption.</strong> Every backup can be encrypted before it leaves your server. If someone gains access to your cloud storage, your data stays protected.</p><p><strong>One-click restore with a 99.9% success rate.</strong> Average restore time is under 5 minutes. Selective restore lets you pull back specific files or database tables instead of restoring everything.</p><p><strong>Built-in staging.</strong> Create a password-protected copy of your site to test updates, theme changes, or plugin installs before touching production.</p><p><strong>Site migration.</strong> Moving to a new host or domain? SiteVault handles URL replacement and serialized data automatically.</p><h3>The Number That Should Keep You Up at Night</h3><p>60% of businesses that lose their data shut down within 6 months. Your hosting provider&#8217;s backup is a single point of failure. If their infrastructure goes down, your backup goes with it. SiteVault stores encrypted copies across independent cloud providers so you&#8217;re never one failure away from losing everything.</p><h3>Getting Started</h3><p>Install <a href="https://wordpress.org/plugins/sitevault-backup-restore-migration/">SiteVault</a> from the WordPress plugin directory, connect your cloud storage, and run your first backup. The whole process takes about 5 minutes.</p><p>More backup and security tools are available at <a href="https://royalplugins.com">royalplugins.com</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Your AI Assistant Can Now Manage WordPress. Here's Why Security Should Be Your First Question]]></title><description><![CDATA[The gap between AI assistants and your WordPress site just closed.]]></description><link>https://royalplugins.substack.com/p/wordpress-mcp-plugin-connect-ai-to-wordpress</link><guid isPermaLink="false">https://royalplugins.substack.com/p/wordpress-mcp-plugin-connect-ai-to-wordpress</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Mon, 13 Apr 2026 01:16:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kG_p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kG_p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 424w, https://substackcdn.com/image/fetch/$s_!kG_p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 848w, https://substackcdn.com/image/fetch/$s_!kG_p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 1272w, https://substackcdn.com/image/fetch/$s_!kG_p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kG_p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png" width="772" height="250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:772,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79885,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://royalplugins.substack.com/i/194023832?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kG_p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 424w, https://substackcdn.com/image/fetch/$s_!kG_p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 848w, https://substackcdn.com/image/fetch/$s_!kG_p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 1272w, https://substackcdn.com/image/fetch/$s_!kG_p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ec46ec2-998a-4f6b-8c53-9634f05abe64_772x250.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The gap between AI assistants and your WordPress site just closed. With a WordPress MCP plugin installed, tools like Claude, ChatGPT, and Gemini can directly create posts, upload media, manage comments, update menus, and handle dozens of other tasks without you touching the dashboard.</p><p>It sounds powerful because it is. It&#8217;s also exactly the kind of access that demands serious security.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>What a WordPress MCP Plugin Actually Does</h3><p>Model Context Protocol (MCP) is an open standard that lets AI assistants interact with external tools and services. Instead of copying content between ChatGPT and your WordPress admin, MCP gives the AI structured access to your site&#8217;s functionality.</p><p><a href="https://wordpress.org/plugins/royal-mcp/">Royal MCP</a> is a free plugin by <a href="https://royalplugins.com">Royal Plugins</a> that brings this to WordPress with 37+ tools covering posts, pages, media, comments, users, categories, tags, menus, post meta, plugins, themes, and more. It works with Claude Desktop, Claude Code, ChatGPT, GPT-4o, Google Gemini, Groq, Ollama, and LM Studio.</p><p>For WooCommerce users, it adds 9 additional tools for managing products and orders. Version 1.4.3 currently has over 400 active installs.</p><h3>Why Security Matters</h3><p>Here&#8217;s the uncomfortable stat: 41% of public MCP servers have zero authentication. That means nearly half the MCP tools people connect their AI to have no security layer at all.</p><p>When you give an AI assistant the ability to publish posts, delete pages, or modify user roles on your site, authentication isn&#8217;t optional. It&#8217;s the baseline.</p><p>Royal MCP takes a security-first approach:</p><p><strong>API key authentication</strong> on every single request. No exceptions.</p><p><strong>OAuth 2.0 with PKCE</strong> for standardized, secure authorization flows.</p><p><strong>Rate limiting</strong> at 60 requests per minute per IP to prevent abuse.</p><p><strong>Full activity audit logging</strong> so you can see exactly what any AI assistant did and when.</p><p><strong>Sensitive data filtering</strong> to keep private information out of AI responses.</p><p>These aren&#8217;t premium add-ons. They ship with the free plugin.</p><h3>The Practical Side</h3><p>The real value shows up in daily workflows. Ask Claude to draft and publish a blog post. Have ChatGPT audit your categories and suggest a cleaner taxonomy. Let Gemini generate alt text for your media library. All without switching tabs or navigating menus.</p><p>Plugin integrations with WooCommerce, GuardPress, and SiteVault extend the toolset further. The plugin follows the MCP 2025-03-26 specification, so it stays compatible as the protocol evolves.</p><h3>Getting Started</h3><p>Install Royal MCP from the <a href="https://wordpress.org/plugins/royal-mcp/">WordPress plugin directory</a>, generate your API key, and connect your preferred AI assistant. The entire setup takes a few minutes.</p><p>If you&#8217;re exploring what AI can do for your WordPress workflow, <a href="https://royalplugins.com">Royal Plugins</a> builds tools designed to make that connection secure and practical from day one.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Your Pages Rank on Google. AI Search Doesn't Care.]]></title><description><![CDATA[Something weird is happening and most people haven&#8217;t noticed yet.]]></description><link>https://royalplugins.substack.com/p/your-pages-rank-on-google-ai-search</link><guid isPermaLink="false">https://royalplugins.substack.com/p/your-pages-rank-on-google-ai-search</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Wed, 25 Mar 2026 00:59:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R92k!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7c4ce2-3485-4046-9373-4e549f334fdf_134x134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Something weird is happening and most people haven&#8217;t noticed yet.</p><p>Sites with strong Google rankings &#8212; page one, good backlinks, solid DA &#8212; are getting completely ignored by AI search engines. ChatGPT doesn&#8217;t cite them. Perplexity doesn&#8217;t pull from them. Google&#8217;s own AI Overviews synthesize answers from other sources entirely.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Meanwhile, some random page with half the backlinks and a fraction of the domain authority keeps showing up in every AI-generated answer.</p><p>What&#8217;s going on?</p><p><strong>AI search engines rank content differently than Google&#8217;s crawler.</strong> They don&#8217;t care about your Domain Authority. They don&#8217;t check your backlink profile. They&#8217;re evaluating something else entirely &#8212; and the SEO industry is only now figuring out what that is.</p><p>It&#8217;s called Generative Engine Optimization &#8212; GEO &#8212; and it comes from actual peer-reviewed research (Princeton, IIT Delhi, published at ACM KDD 2024). Not marketing fluff. Real experiments measuring what makes AI engines cite one source over another.</p><p>The findings are wild.</p><p><strong>The biggest factor is evidence density.</strong> Pages with specific statistics, named sources, and inline citations get cited dramatically more than pages with generic advice. The research found that adding direct quotations from authoritative sources improved AI citation visibility by roughly 43%. Adding statistics? About 32%.</p><p>Compare these two sentences:</p><p><em>&#8220;Experts recommend updating your plugins regularly.&#8221;</em> &#8212; AI skips this.</p><p><em>&#8220;Patchstack reported 333 new plugin vulnerabilities in a single week in January 2026.&#8221;</em> &#8212; AI cites this.</p><p>Same topic. Same general advice. But one gives the AI something concrete to reference, and the other gives it nothing.</p><p><strong>The second factor is freshness.</strong> AI models prefer current information, and they&#8217;re surprisingly good at sniffing out stale content. If your &#8220;2026 guide&#8221; still has 2024 data in it, the model quietly moves on to something more recent. Your rankings don&#8217;t drop &#8212; you just don&#8217;t get cited.</p><p><strong>The third is structure.</strong> AI engines favor answer-first formatting. If your page makes someone scroll past three paragraphs of context before reaching the actual answer, the model skips to a competitor who leads with it.</p><p>Here&#8217;s the uncomfortable part: you can score a 92/100 on traditional SEO and score a 34/100 on GEO. That means you&#8217;re perfectly optimized for a search paradigm that&#8217;s shrinking, and invisible to the one that&#8217;s growing.</p><p>I wrote a full breakdown of how GEO scoring works, why the gap between your SEO score and GEO score matters, and what the triple threat scoring model looks like in practice. It&#8217;s the most thorough piece I&#8217;ve done on this topic:</p><p><strong><a href="https://royalplugins.medium.com/your-seo-score-doesnt-matter-anymore-and-what-replaced-it-389bbdfa2eaa">Your SEO Score Doesn&#8217;t Matter Anymore (And What Replaced It)</a></strong></p><p>If you manage any kind of content strategy &#8212; blog, SaaS, e-commerce, agency &#8212; this is the blind spot you didn&#8217;t know you had. The people who figure it out early will own the AI citations for their industry. Everyone else will keep optimizing for Google&#8217;s crawler and wondering why their traffic is declining despite solid rankings.</p><p>The research is clear. The tools exist. The only question is how long you wait.</p><p>See you next week.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I Audited 50 Popular WordPress Plugins. Here's What Scared Me.]]></title><description><![CDATA[There are 36 new WordPress plugin vulnerabilities discovered every single day.]]></description><link>https://royalplugins.substack.com/p/i-audited-50-popular-wordpress-plugins</link><guid isPermaLink="false">https://royalplugins.substack.com/p/i-audited-50-popular-wordpress-plugins</guid><dc:creator><![CDATA[RP Team]]></dc:creator><pubDate>Wed, 11 Mar 2026 03:32:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!h3eU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>There are 36 new WordPress plugin vulnerabilities discovered every single day. In 2025 alone, 11,334 new vulnerabilities were reported &#8212; up 42% from the year before. And 91% of all WordPress security issues come from one place: plugins.</em></p><p>So I decided to pull the 50 most popular WordPress plugins by active installations &#8212; we&#8217;re talking Elementor, Yoast, WooCommerce, Jetpack, the household names &#8212; and audit them for bloat, outdated PHP support, known vulnerabilities, and maintenance activity.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What I found wasn&#8217;t great.</p><h2>The Bloat Problem: Your Plugins Are Heavier Than Your Theme</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h3eU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h3eU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 424w, https://substackcdn.com/image/fetch/$s_!h3eU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 848w, https://substackcdn.com/image/fetch/$s_!h3eU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 1272w, https://substackcdn.com/image/fetch/$s_!h3eU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h3eU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png" width="811" height="871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:871,&quot;width&quot;:811,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89562,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://royalplugins.substack.com/i/190571311?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h3eU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 424w, https://substackcdn.com/image/fetch/$s_!h3eU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 848w, https://substackcdn.com/image/fetch/$s_!h3eU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 1272w, https://substackcdn.com/image/fetch/$s_!h3eU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F046f915c-2060-4ee8-9652-e9c297911e9e_811x871.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s start with file sizes. When you install a plugin, that entire ZIP gets unpacked into your <code>wp-content</code> folder. Every file gets loaded, parsed, and executed on every page request (unless the developer was careful about conditional loading &#8212; and most aren&#8217;t).</p><p>Here are the 5 heaviest plugins in the top 50:</p><p><strong>Jetpack</strong> &#8212; 3M+ installs &#8212; <strong>25.0 MB <br>MonsterInsights</strong> &#8212; 2M+ installs &#8212; <strong>23.7 MB <br>Elementor</strong> &#8212; 10M+ installs &#8212; <strong>18.4 MB <br>WooCommerce</strong> &#8212; 7M+ installs &#8212; <strong>18.4 MB <br>OptinMonster</strong> &#8212; 1M+ installs &#8212; <strong>12.4 MB</strong></p><p>Jetpack ships at <strong>25 megabytes</strong>. For context, the entire WordPress core is about 20 MB. You&#8217;re installing a plugin that&#8217;s larger than WordPress itself.</p><p>Now compare that to plugins that actually respect your server:</p><p><strong>Classic Widgets</strong> &#8212; 2M+ installs &#8212; <strong>9 KB<br>Classic Editor</strong> &#8212; 9M+ installs &#8212; <strong>38 KB<br>WPS Hide Login</strong> &#8212; 2M+ installs &#8212; <strong>50 KB<br>Akismet</strong> &#8212; 6M+ installs &#8212; <strong>117 KB<br>Yoast Duplicate Post</strong> &#8212; 4M+ installs &#8212; <strong>118 KB</strong></p><p>Classic Widgets does its job in <strong>9 kilobytes</strong>. That&#8217;s 2,778 times smaller than Jetpack. Both have millions of users. One of them isn&#8217;t slowing down anyone&#8217;s site.</p><p>The bloat isn&#8217;t just about disk space &#8212; it&#8217;s about execution time. More files means more autoloading, more database queries, more memory consumption. Stack five bloated plugins together and you&#8217;ve added 500ms+ to every page load before your content even renders.</p><h2>The PHP Problem: Running 2006 Code in 2026</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zt7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zt7q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 424w, https://substackcdn.com/image/fetch/$s_!Zt7q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 848w, https://substackcdn.com/image/fetch/$s_!Zt7q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 1272w, https://substackcdn.com/image/fetch/$s_!Zt7q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zt7q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png" width="810" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:810,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49189,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://royalplugins.substack.com/i/190571311?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zt7q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 424w, https://substackcdn.com/image/fetch/$s_!Zt7q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 848w, https://substackcdn.com/image/fetch/$s_!Zt7q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 1272w, https://substackcdn.com/image/fetch/$s_!Zt7q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9ad186-a207-4ed4-ad83-1879d0329f8d_810x794.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>PHP 7.2 reached end-of-life in November 2020. PHP 7.4 hit EOL in November 2022. These versions no longer receive security patches. Running them is like leaving your front door unlocked and hoping nobody walks by.</p><p>So how many of the top 50 plugins still support these dead PHP versions?</p><p><strong>PHP 5.2.4</strong> &#8212; 2 plugins &#8212; <em>EOL since 2011<br></em><strong>PHP 5.3</strong> &#8212; 1 plugin &#8212; <em>EOL since 2014<br></em><strong>PHP 5.5</strong> &#8212; 1 plugin &#8212; <em>EOL since 2016<br></em><strong>PHP 5.6</strong> &#8212; 4 plugins &#8212; <em>EOL since 2018<br></em><strong>PHP 7.0</strong> &#8212; 4 plugins &#8212; <em>EOL since 2019<br></em><strong>PHP 7.2</strong> &#8212; 8 plugins &#8212; <em>EOL since 2020<br></em><strong>PHP 7.4</strong> &#8212; 23 plugins &#8212; <em>EOL since 2022<br></em><strong>PHP 8.1+</strong> &#8212; 1 plugin &#8212; <em>Currently supported<br></em><strong>Not specified</strong> &#8212; 5 plugins</p><p>Read that again. <strong>Two plugins in the top 50 still officially support PHP 5.2.4</strong> &#8212; a version released in 2006. One of them is File Manager, which has over 1 million active installations and hasn&#8217;t been updated since June 2025.</p><p>Only <strong>one plugin</strong> out of fifty requires PHP 8.1 or higher. One.</p><p>When a plugin supports PHP 5.x, it means the codebase is either ancient and untouched, or actively maintained with backward-compatible code that can&#8217;t take advantage of modern PHP security features like typed properties, enums, readonly classes, or fibers. Either way, you&#8217;re running legacy code on your production server.</p><p>And here&#8217;s the kicker: roughly 30% of WordPress sites in the wild are still running PHP 7.x. The plugins enable the bad behavior, and the bad behavior enables the plugins. It&#8217;s a cycle nobody wants to break because updating means losing users.</p><h2>The Vulnerability Epidemic: 5 Hours to Exploitation</h2><p>The numbers from Patchstack&#8217;s 2026 security report are genuinely alarming:</p><ul><li><p><strong>11,334</strong> new WordPress vulnerabilities in 2025 (up 42% from 2024)</p></li><li><p><strong>57%</strong> are exploitable by unauthenticated visitors &#8212; no login required</p></li><li><p><strong>Median time to first exploit: 5 hours</strong> after public disclosure</p></li><li><p><strong>46%</strong> of vulnerabilities had <strong>no patch available</strong> when they were publicly disclosed</p></li></ul><p>That last stat is worth sitting with. Nearly half of all disclosed WordPress plugin vulnerabilities had no fix available when they went public. That means attackers knew about the flaw, security researchers knew about the flaw, and the plugin developer either didn&#8217;t know or hadn&#8217;t shipped a fix yet. Your site was exposed with no option to protect it.</p><p>Here are real examples from the top installed plugins:</p><h3>Really Simple Security (3,000,000+ installs)</h3><p><strong>CVE-2024-10924 &#8212; CVSS 9.8 (Critical)</strong> An authentication bypass that let anyone gain admin access without credentials. Wordfence called it &#8220;one of the most serious vulnerabilities we&#8217;ve reported in our 12-year history.&#8221; The irony of a security plugin having a critical security flaw wasn&#8217;t lost on anyone.</p><h3>LiteSpeed Cache (7,000,000+ installs)</h3><p><strong>CVE-2025-12450 &#8212; High Severity</strong> A stored XSS vulnerability affecting all versions up to 7.5.0.1. Before that, a separate privilege escalation bug gave unauthenticated attackers full admin access. Seven million sites.</p><h3>Post SMTP (400,000+ installs)</h3><p><strong>CVE-2025-11833 &#8212; CVSS 9.8 (Critical)</strong> Unauthenticated account takeover through password reset email interception. An attacker could take over any account on your site without knowing a single password.</p><p>These aren&#8217;t obscure plugins from unknown developers. These are tools installed on millions of sites, built by well-funded teams, and they still shipped critical vulnerabilities.</p><h2>The Abandonment Crisis: 59% Left to Rot</h2><p>This might be the scariest finding of all.</p><p>According to recent analysis, <strong>59% of WordPress plugins &#8212; over 34,000 &#8212; have not been updated in more than two years</strong>. They&#8217;re effectively abandoned. No security patches. No compatibility updates. No one at the wheel.</p><p>Among those:</p><ul><li><p><strong>232 plugins</strong> with 10,000 to 999,000 active installations are abandoned</p></li><li><p><strong>1,614 plugins</strong> were removed from <a href="http://wordpress.org/">WordPress.org</a> in 2025 after developers couldn&#8217;t be contacted</p></li><li><p><strong>150+ plugins</strong> were pulled in December 2025 alone due to unpatched security issues</p></li></ul><p><a href="http://wordpress.org/">WordPress.org</a> shows &#8220;last updated&#8221; dates on every plugin page, but how many site owners actually check? You install a plugin, it works, you forget about it. Two years later, it&#8217;s a backdoor.</p><p>In our audit, the most concerning example was <strong>File Manager</strong> &#8212; over 1 million active installs, requires PHP 5.2.4, and last updated in June 2025. It gives users a full file browser inside WordPress admin. If that plugin has an unpatched vulnerability, an attacker has direct access to every file on your server.</p><h2>What Should You Actually Do?</h2><p>I&#8217;m not saying uninstall everything and hand-code your site. Plugins are the reason WordPress powers 40%+ of the web. But you should audit what you&#8217;re running:</p><p><strong>1. Check the ZIP size.</strong> If a plugin is 10+ MB, ask yourself: does this feature really need that much code? Often the answer is no &#8212; and there&#8217;s a leaner alternative.</p><p><strong>2. Check the PHP requirement.</strong> If it says PHP 5.x or even 7.0, that&#8217;s a red flag. The codebase is either ancient or deliberately holding back.</p><p><strong>3. Check the last update date.</strong> Anything older than 6 months should be investigated. Anything older than a year should probably be replaced.</p><p><strong>4. Check for known CVEs.</strong> Sites like <a href="https://patchstack.com/">Patchstack</a> and <a href="https://wpscan.com/">WPScan</a> maintain free vulnerability databases. Search your plugins before you install them.</p><p><strong>5. Count your plugins.</strong> The average WordPress site runs 20-30 plugins. Every one is an attack surface. If you can consolidate or remove, do it.</p><p>At <a href="https://royalplugins.com/">Royal Plugins</a>, this is exactly why we built our suite the way we did. Every plugin requires PHP 8.0+ minimum &#8212; no legacy baggage. Every release goes through multi-engine security scanning before it ships. And we keep our plugins lean: <a href="https://seobolt.io/">SEObolt</a> handles technical SEO without the 5+ MB overhead of the big SEO plugins.</p><p>We believe a WordPress plugin should do one job exceptionally well, in as little code as possible, on a modern stack. That&#8217;s it.</p><h2>The Bottom Line</h2><p>Your WordPress site&#8217;s security is only as strong as your weakest plugin. And right now, the ecosystem is shipping 36 new vulnerabilities per day, half of them without patches, on codebases that still support PHP versions from the Bush administration.</p><p>Audit your plugins. Check the data. And be a lot more selective about what you let run on your server.</p><div><hr></div><p><em>Data sources: <a href="http://wordpress.org/">WordPress.org</a> Plugin API, Patchstack State of WordPress Security 2026, WPScan Vulnerability Database, Wordfence Threat Intelligence. All data verified as of March 2026.</em></p><p><em>Royal Plugins builds lightweight, security-first WordPress plugins. Visit <a href="https://royalplugins.com/">royalplugins.com</a> to see our approach.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://royalplugins.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>