{"id":360572,"date":"2026-09-12T11:40:19","date_gmt":"2026-09-12T11:40:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/content-health-by-netotraffic\/"},"modified":"2026-09-16T18:05:03","modified_gmt":"2026-09-16T18:05:03","slug":"netotraffic-content-suite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/netotraffic-content-suite\/","author":23556643,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"NetoTraffic Content Suite","header_author":"NetoTraffic","header_description":"Audit your posts for missing meta descriptions, thin content, stale pages and missing internal links. Optionally fix meta descriptions and suggest internal links with AI.","assets_banners_color":"5631b1","last_updated":"2026-09-16 18:05:03","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/netotraffic.com","header_plugin_uri":"","header_author_uri":"https:\/\/netotraffic.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":159,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.8":{"tag":"1.1.8","author":"netotraffics","date":"2026-09-12 15:02:04","revision":3692836},"1.1.9":{"tag":"1.1.9","author":"netotraffics","date":"2026-09-16 18:10:47","revision":3699098},"1.2.0":{"tag":"1.2.0","author":"netotraffics","date":"2026-09-16 18:05:03","revision":3699086}},"upgrade_notice":{"1.1.3":"<p>Fixes the LLMs &amp; schema admin page showing raw HTML instead of the normal WordPress screen.<\/p>","1.1.2":"<p>Renames a few admin labels to clearer, descriptive names. No settings or data changes.<\/p>","1.1.1":"<p>Renames admin menu labels to NetoTraffic branding and fixes the AI Discovery page render bug.\nNo database changes \u2014 safe to update.<\/p>","1.1.0":"<p>Moves the plugin to its own top-level menu (was under Tools) and adds Technical AEO (llms.txt, AI\ncrawler controls, schema), Answer Density scoring, Content Blocks, author credentials and a\nCitation Tracker. If Google Search Console is connected, this is safe to update with no action\nneeded \u2014 only a fresh &quot;Connect&quot; click needs the updated redirect URI in your Google Cloud project.<\/p>","1.0.2":"<p>Replaces the link-check ETA with a plain &quot;can take minutes&quot; note.<\/p>","1.0.1":"<p>Refreshes admin.js\/admin.css cache-busting and adds batched link checking.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3692858,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3692858,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3692858,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3692858,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.8","1.1.9","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3692826,"resolution":"1","location":"assets","locale":"","width":1293,"height":590},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3692826,"resolution":"2","location":"assets","locale":"","width":1715,"height":780},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3692826,"resolution":"3","location":"assets","locale":"","width":1115,"height":863},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3692826,"resolution":"4","location":"assets","locale":"","width":869,"height":592},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3692826,"resolution":"5","location":"assets","locale":"","width":1690,"height":806},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3692861,"resolution":"6","location":"assets","locale":"","width":746,"height":874}},"screenshots":{"1":"The report: nine counts and a Health score across your whole site after a scan, with a \"Fix these first\" shortlist.","2":"Drilling into the posts with no meta description.","3":"The corpus report: duplicate, overlapping, merge-candidate and missing-pillar pages.","4":"Link health: broken links and images, active redirects, and orphan pages in one place.","5":"Settings: thresholds, which content to scan, and the detected SEO plugin.","6":"The optional AI Fixes tab."}},"plugin_section":[],"plugin_tags":[17214,19795,5777,186,11421],"plugin_category":[55],"plugin_contributors":[280365],"plugin_business_model":[],"class_list":["post-360572","plugin","type-plugin","status-publish","hentry","plugin_tags-alt-text","plugin_tags-content-audit","plugin_tags-meta-description","plugin_tags-seo","plugin_tags-thin-content","plugin_category-seo-and-marketing","plugin_contributors-netotraffics","plugin_committers-netotraffics"],"banners":{"banner":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/banner-772x250.png?rev=3692858","banner_2x":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/banner-1544x500.png?rev=3692858","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/icon-128x128.png?rev=3692858","icon_2x":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/icon-256x256.png?rev=3692858","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/screenshot-1.png?rev=3692826","caption":"The report: nine counts and a Health score across your whole site after a scan, with a \"Fix these first\" shortlist."},{"src":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/screenshot-2.png?rev=3692826","caption":"Drilling into the posts with no meta description."},{"src":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/screenshot-3.png?rev=3692826","caption":"The corpus report: duplicate, overlapping, merge-candidate and missing-pillar pages."},{"src":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/screenshot-4.png?rev=3692826","caption":"Link health: broken links and images, active redirects, and orphan pages in one place."},{"src":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/screenshot-5.png?rev=3692826","caption":"Settings: thresholds, which content to scan, and the detected SEO plugin."},{"src":"https:\/\/ps.w.org\/netotraffic-content-suite\/assets\/screenshot-6.png?rev=3692861","caption":"The optional AI Fixes tab."}],"raw_content":"<!--section=description-->\n<p>Content Health reads your own posts and tells you what is holding them back.<\/p>\n\n<p>Activate it, click <strong>Scan my site<\/strong>, and you get nine counts:<\/p>\n\n<ul>\n<li>how many posts have <strong>no meta description<\/strong><\/li>\n<li>how many have a <strong>title tag<\/strong> that is too long to show in full, or too short to be worth the space<\/li>\n<li>how many are <strong>thin<\/strong> \u2014 under your word threshold<\/li>\n<li>how many have <strong>not been updated<\/strong> in years<\/li>\n<li>how many have <strong>no internal links<\/strong><\/li>\n<li>how many contain <strong>images with no alt text<\/strong><\/li>\n<li>how many have <strong>nothing linking to them<\/strong> \u2014 orphaned pages<\/li>\n<li>how many are <strong>hard to skim<\/strong> \u2014 missing subheads, a broken heading outline, or wall-of-text paragraphs<\/li>\n<li>how many were written by an <strong>author with no bio<\/strong> \u2014 a trust signal both readers and AI engines look for<\/li>\n<\/ul>\n\n<p>Click any number to see exactly which posts, with a link straight to the editor. A \"Fix these\nfirst\" shortlist ranks the posts with the most to gain, so a site with hundreds of flagged posts\nhas an obvious place to begin, and a single <strong>Health score<\/strong> next to the scan button gives\none number to track between scans instead of nine separate counts.<\/p>\n\n<h4>The corpus report<\/h4>\n\n<p>The Report tab also compares every post against every other post:<\/p>\n\n<ul>\n<li><strong>Duplicate content<\/strong> \u2014 pages close enough to be the same article, with the strongest one\nflagged to keep.<\/li>\n<li><strong>Covering the same ground<\/strong> \u2014 pages that overlap but are not duplicates: sharpen them onto\ndifferent angles or combine them.<\/li>\n<li><strong>Merge candidates<\/strong> \u2014 thin pages that only add up to something when read together.<\/li>\n<li><strong>Missing pillar<\/strong> \u2014 related pages that nothing else on the site links to.<\/li>\n<\/ul>\n\n<p>This runs during the scan from your own post content: no AI, no network call.<\/p>\n\n<p>A <strong>Link health<\/strong> view sits alongside those: every active redirect, every orphan page, and\nevery broken link or image found by an optional checker (its own button, never part of Scan\nmy site).<\/p>\n\n<p>The audit is the whole free plugin. No account, no sign-up, and no time limit.<\/p>\n\n<h4>Works with your SEO plugin<\/h4>\n\n<p>Meta descriptions and title tags belong to whichever SEO plugin you use, so this plugin reads\nand writes that plugin's own fields rather than inventing competing ones. Supported:<\/p>\n\n<ul>\n<li>Yoast SEO<\/li>\n<li>Rank Math<\/li>\n<li>SEOPress<\/li>\n<li>All in One SEO (read-only \u2014 see the FAQ)<\/li>\n<li>No SEO plugin at all \u2014 this plugin can store and output descriptions and titles itself<\/li>\n<\/ul>\n\n<h4>Built for big sites<\/h4>\n\n<p>The scan runs in batches with a progress bar and a handful of queries per batch. It never\nrenders your posts, so it does not run every other plugin on your site thousands of times.\nThere are no cron jobs and no background activity of any kind.<\/p>\n\n<h4>Optional extras<\/h4>\n\n<p>Paste an API key and the plugin can generate meta descriptions, title tags, image alt text,\ninternal-link suggestions, a thin-post draft (outline first), Content Blocks, or an llms.txt\nsite summary through netotraffic.com. You review every write before it is saved, and every\nchange can be undone. With no key, none of that runs and nothing is sent. What is sent, and\nwhen, is listed in the FAQ.<\/p>\n\n<p>A dedicated <strong>LLMs &amp; crawlers<\/strong> page covers <code>\/llms.txt<\/code> (built from your published pages,\nnever written to disk) and Allow\/Block rules for named AI bots in robots.txt. <strong>Answer\nDensity<\/strong> scores how many question-shaped headings lead into a real answer. <strong>Content\nBlocks<\/strong> add TL;DR, FAQ and Pros &amp; Cons in the editor. Job title, credentials and social\nlinks can be added on each author's profile for an optional author card.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to the <strong>Content Suite<\/strong> menu item (its own top-level menu, no longer under Tools)\nand click <strong>Scan my site<\/strong>.<\/li>\n<\/ol>\n\n<p>That is everything the free audit needs. The AI Fixes tab and LLMs &amp; crawlers are all\noptional and can be ignored.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%20to%20use%20this%20plugin%3F\"><h3>Do I need an account to use this plugin?<\/h3><\/dt>\n<dd><p>No. The audit \u2014 all nine checks, the Health score, the corpus report, the Link health tab\n(including the broken link checker), the drill-down lists, the settings \u2014 works completely on its\nown and always will.\nAn account is only needed if you want the plugin to write meta descriptions, title tags or alt\ntext for you, suggest links, or draft an article.<\/p><\/dd>\n<dt id=\"what%20external%20services%20does%20this%20plugin%20use%3F\"><h3>What external services does this plugin use?<\/h3><\/dt>\n<dd><p>Three, all optional, none of them on by default:<\/p>\n\n<ul>\n<li><strong>netotraffic.com<\/strong> \u2014 only if you paste an API key and click a generate or fix button.\nEndpoint: <code>https:\/\/api.netotraffic.com\/v1\/plugin<\/code>.\nTerms: https:\/\/netotraffic.com\/terms-of-service\/\nPrivacy: https:\/\/netotraffic.com\/privacy-policy\/<\/li>\n<li><strong>Google Search Console<\/strong> \u2014 only if you paste your own Google Cloud Client ID and Client\nSecret and click Connect. This is your own Google Cloud project; netotraffic.com is never\ninvolved and never sees that data.\nTerms: https:\/\/policies.google.com\/terms\nPrivacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>Check links<\/strong> (Link health tab) \u2014 only when you click that button. It requests the link\nand image addresses found in your content to see whether each one still responds. No\naccount and no API key. What is sent is an ordinary HTTP request (a HEAD, or a small\nranged GET if a server refuses HEAD).<\/li>\n<\/ul>\n\n<p>Nothing is sent on activation, on a schedule, or in the background.<\/p><\/dd>\n<dt id=\"what%20is%20sent%20to%20netotraffic.com%2C%20and%20when%3F\"><h3>What is sent to netotraffic.com, and when?<\/h3><\/dt>\n<dd><p>Nothing, unless you have pasted an API key and clicked a button that generates something.\nNew accounts include a number of free credits; the plugin shows every price before you\nclick. You can revoke a key from your netotraffic.com account at any time.<\/p>\n\n<ul>\n<li><strong>Connect<\/strong>: your API key and site URL, to check the key and read your credit balance.<\/li>\n<li><strong>Fix with AI<\/strong> (description or title): API key, site URL, plugin version, that post's\ntitle, URL, current title tag when rewriting a title, and up to 6,000 characters of its\ntext.<\/li>\n<li><strong>Suggest links<\/strong>: the same, plus titles, URLs and excerpts of other published posts to\nchoose targets from \u2014 never their full text.<\/li>\n<li><strong>Write alt text<\/strong>: the same, plus the web addresses of up to 20 images with no alt text.\nThe image files themselves are not uploaded.<\/li>\n<li><strong>Draft with AI<\/strong>: the same, plus site language, target length, focus keyword if you typed\none, and \u2014 on the second call \u2014 the outline as you edited it.<\/li>\n<li><strong>Generate with AI<\/strong> on a Content Block: API key, site URL, plugin version, that post's\ntitle and up to 6,000 characters of its text.<\/li>\n<li><strong>Generate site summary<\/strong> on llms.txt: API key, site URL, plugin version, site name and\ntagline, site language, and titles of up to eight recent published pages.<\/li>\n<\/ul>\n\n<p>No personal data about your visitors, users or customers is transmitted. Your credit\nbalance is updated from those responses; the plugin never calls out merely to refresh a\nnumber.<\/p><\/dd>\n<dt id=\"what%20is%20sent%20to%20google%20when%20search%20console%20is%20connected%3F\"><h3>What is sent to Google when Search Console is connected?<\/h3><\/dt>\n<dd><p>Nothing, unless you have created your own Google Cloud project, pasted its Client ID and\nClient Secret, and clicked Connect.<\/p>\n\n<ul>\n<li><strong>Connect<\/strong>: your browser goes to Google's consent screen (<code>accounts.google.com<\/code>) using\nyour Client ID. After you grant access, this site's server exchanges the code for tokens\nat <code>oauth2.googleapis.com<\/code> using your Client ID and Secret. That exchange never passes\nthrough netotraffic.com.<\/li>\n<li><strong>During a scan<\/strong> while connected: one request to Google's Search Console API\n(<code>www.googleapis.com\/webmasters\/v3<\/code>) for this site's click and impression counts per page\nover roughly the last six months. Only aggregate counts, not individual visitors.<\/li>\n<\/ul>\n\n<p>Disconnecting deletes the saved Client ID, Client Secret and tokens from this site\nimmediately. Raw Search Console data never leaves this site's database.<\/p><\/dd>\n<dt id=\"will%20it%20change%20my%20posts%3F\"><h3>Will it change my posts?<\/h3><\/dt>\n<dd><p>Only when you are connected to the AI service, and only on the post you clicked a button on.\nNothing happens on its own, and every change has an Undo button next to it because the previous\nvalue is always saved first.<\/p>\n\n<p>Four things can be changed, and they are separate:<\/p>\n\n<ul>\n<li><strong>The meta description<\/strong> \u2014 its own field, never your post content.<\/li>\n<li><strong>The title tag<\/strong> \u2014 your SEO plugin's title field. Your post's actual name is never changed,\nso nothing is renamed anywhere else on your site.<\/li>\n<li><strong>Image alt text<\/strong> \u2014 this does edit your post content, but only by adding an <code>alt<\/code> to images\nthat had none. Nothing else in the post is touched.<\/li>\n<li><strong>A drafted article<\/strong> on a thin post \u2014 this replaces (or adds to) the post's content, and it\nis the only feature that does. You read the whole draft in the plugin and click Save before\nanything reaches the page. WordPress also keeps its own revision.<\/li>\n<\/ul>\n\n<p>Doing a whole list at once never writes straight to your site: it drafts everything and shows\nyou first, so you can edit and untick any you do not want before saving.<\/p>\n\n<p>By default it also refuses to touch a post that already has a description. You can turn that\nsafety off in Settings if you actually want to replace existing ones.<\/p><\/dd>\n<dt id=\"does%20it%20add%20the%20internal%20links%20for%20me%3F\"><h3>Does it add the internal links for me?<\/h3><\/dt>\n<dd><p>No, and that is deliberate. It suggests them: an anchor phrase that already appears in your\npost, the post it should link to, and the finished HTML on a Copy button. You decide where it\ngoes and paste it in yourself.<\/p>\n\n<p>Automatically inserting a link means editing your stored post content, and one bad edit on a\nlive page is a much bigger problem than a meta description you can undo. Every suggested\nanchor phrase is also checked against your actual post text before you see it, so you will\nnever be handed a phrase you cannot find.<\/p><\/dd>\n<dt id=\"which%20seo%20plugins%20are%20supported%3F\"><h3>Which SEO plugins are supported?<\/h3><\/dt>\n<dd><p>Yoast SEO, Rank Math and SEOPress are fully supported for both reading and writing.<\/p>\n\n<p>All in One SEO is read-only in this version: it stores descriptions in its own database table\nwith its own cache, and writing there directly could leave AIOSEO showing stale values. On an\nAIOSEO site the audit works normally and AI fixes hand you the finished description to paste in.<\/p>\n\n<p>If you have no SEO plugin at all, the plugin stores descriptions itself, and there is a setting\nto output them as a description tag. That setting turns itself off automatically if you later\ninstall an SEO plugin, so you can never end up with two description tags.<\/p><\/dd>\n<dt id=\"what%20makes%20a%20page%20%22orphaned%22%3F\"><h3>What makes a page \"orphaned\"?<\/h3><\/dt>\n<dd><p>Nothing else on your site links to it. Search engines find pages by following links, so a page\nnothing points at is harder to discover and gets no ranking strength passed to it.<\/p>\n\n<p>This check needs the whole site read before it can answer, so it only appears once a scan\nfinishes \u2014 a half-finished scan would report most of your site as orphaned. Links a post makes\nto itself do not count.<\/p>\n\n<p>Anything in one of your navigation menus is never listed, and neither are your front page and\nblog page \u2014 they are linked from every page on the site.<\/p>\n\n<p>One limitation to know about: only links inside your posts' content are counted. The scan reads\nwhat is stored in the database and never renders a page, which is what keeps it fast on large\nsites, but it means a post reachable only through a category archive or a related-posts widget\ncan still show up here. If a listed page looks fine to you, mark it \"not an issue\" and it will\nstay off the report.<\/p><\/dd>\n<dt id=\"why%20does%20%22no%20author%20bio%22%20send%20me%20to%20a%20user%20profile%20instead%20of%20the%20post%3F\"><h3>Why does \"No author bio\" send me to a user profile instead of the post?<\/h3><\/dt>\n<dd><p>Because that is where the fix actually lives. A bio is a field on the <em>author's<\/em> profile\n(<strong>Users \u2192 Profile<\/strong>), not anything the post editor exposes, so this is the one report whose Edit\nlink points somewhere other than the post itself. It needs the same permission WordPress already\nrequires to edit that user's profile; if you cannot edit the author's profile, the link is left\noff the row instead of sending you somewhere that will just refuse you.<\/p>\n\n<p>The check itself only looks at whether the author has <em>any<\/em> bio text at all \u2014 it does not judge\nlength or quality, and it says nothing about theme output. Whether your theme actually displays a\nbyline or the bio on the page is a separate, theme-specific question this plugin cannot answer\nwithout rendering your posts, which is exactly what the scan is built to avoid.<\/p><\/dd>\n<dt id=\"what%20is%20the%20health%20score%3F\"><h3>What is the Health score?<\/h3><\/dt>\n<dd><p>One number, 100 down to 0, next to the scan button once a scan has read at least one post. It is\nnot a new signal \u2014 it is the same weighted scoring \"Fix these first\" already uses (a missing\ndescription counts for more than a missing alt tag), averaged across every scanned post instead of\njust the top ten, and normalised so the number means the same thing on a 5-post site and a\n5,000-post one. 100 means every scanned post currently has zero open issues. It deliberately\nignores the cornerstone star: this is a site-wide reading, not a \"what to fix first\" ranking, and a\nhandful of starred pages should not be able to swing the whole number.<\/p><\/dd>\n<dt id=\"what%20counts%20as%20an%20internal%20link%3F\"><h3>What counts as an internal link?<\/h3><\/dt>\n<dd><p>A link in the post's content pointing at your own domain, either as a full URL or as a relative\npath. Anchors, <code>mailto:<\/code>, and <code>tel:<\/code> links do not count.<\/p>\n\n<p>Because the scan reads the stored post content rather than rendering the page, links added by\nyour theme, by related-post widgets, or by shortcodes are not counted. Those are not really the\npost's own internal links, and rendering every post to find them would make scanning a large\nsite impossibly slow.<\/p><\/dd>\n<dt id=\"what%20does%20the%20corpus%20report%20%28duplicates%2C%20overlaps%2C%20merge%20candidates%2C%20missing%20pillar%29%20compare%3F\"><h3>What does the corpus report (duplicates, overlaps, merge candidates, missing pillar) compare?<\/h3><\/dt>\n<dd><p>Each post is reduced to a handful of its most distinctive words during the scan, weighted so its\ntitle counts more than its body. Posts are then compared pairwise by how much that reduced set\noverlaps. Two posts that share almost everything are reported as duplicates; a looser overlap is\nreported as \"covering the same ground\". A thin pair or group in either band becomes a merge\ncandidate; an overlapping pair where neither post is linked to from anywhere else on the site\nbecomes a \"missing pillar\" pair. All of this runs on your own post content already read during\nthe scan \u2014 no extra requests, no AI.<\/p><\/dd>\n<dt id=\"how%20does%20the%20broken%20link%20checker%20work%2C%20and%20why%20isn%27t%20it%20part%20of%20the%20main%20scan%3F\"><h3>How does the broken link checker work, and why isn't it part of the main scan?<\/h3><\/dt>\n<dd><p>Scan my site only ever reads your database, which is what makes it safe to run as often as you\nlike on a site of any size. Checking whether a link still works means requesting the address\nitself \u2014 a fundamentally slower, external kind of check \u2014 so it stays a separate button\n(\"Check links\" on the Link health tab) rather than something the main scan does automatically.\nIt runs in two batched passes, the same progress-bar pattern the main scan uses: first it reads\nevery link and image address out of your content, then it requests each <em>unique<\/em> address once\n(so a link repeated on fifty pages is only checked once), and shows anything that no longer\nresponds together with every page that links to it.<\/p><\/dd>\n<dt id=\"how%20is%20the%20word%20count%20calculated%3F\"><h3>How is the word count calculated?<\/h3><\/dt>\n<dd><p>Block delimiters and shortcodes are stripped, HTML tags are removed, and what is left is\ncounted. It handles non-English text correctly.<\/p><\/dd>\n<dt id=\"my%20site%20has%20thousands%20of%20posts.%20will%20scanning%20break%20it%3F\"><h3>My site has thousands of posts. Will scanning break it?<\/h3><\/dt>\n<dd><p>No. The scan runs in batches of 100 posts, each its own quick request, with a progress bar. You\ncan close the tab at any point \u2014 you will just get partial results and can rescan later.<\/p><\/dd>\n<dt id=\"how%20do%20i%20remove%20everything%20the%20plugin%20stored%3F\"><h3>How do I remove everything the plugin stored?<\/h3><\/dt>\n<dd><p>Deleting the plugin removes its settings and saved scan results automatically. There is also a\nsetting to delete the plugin's own post data on uninstall. Descriptions that were written into\nyour SEO plugin's field are left alone \u2014 they are your content at that point, and deleting them\nwould remove ones this plugin never wrote.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Admin menu is <strong>Content Suite<\/strong> with the plugin icon.<\/li>\n<li>Brand (icon + Content Health) sits on the left of the tab row; not a tab.<\/li>\n<li>Settings, AI KEY and Help show: NetoTraffic Content Suite \u2014 version \u2026<\/li>\n<li>AI KEY feature list is collapsed behind a chevron; signup line stays visible.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Gutenberg blocks ship block.json so WordPress.org lists them as TL;DR, FAQ and Pros &amp; Cons.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>robots.txt core lines: derive admin\/AJAX paths from admin_url().<\/li>\n<li>Plugin row \"Rate this plugin\" links to the full reviews page (not a 5-star filter).<\/li>\n<li>Front-end author-card \/ content-block CSS uses wp_enqueue_style + wp_add_inline_style.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Credit price list: distinguish the two Hard to skim actions \u2014 \"per page (add subheadings)\" vs\n\"per page (skimmability rewrite)\" instead of duplicate \"per page\" labels.<\/li>\n<li>Help tab: Content Health menu overview, credit price guide, llms.txt cornerstone note, and\nentries for Get content brief and Find pages that could link here.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Fixed REST API fatal error (500 on every bach\/v1 call including Forget key and Connect): a bad\nroute registration left over from removing Citation monitor broke <code>rest_api_init<\/code>. Restored\n  \/crawlers\/report, <code>\/schema\/settings<\/code>, and <code>\/gsc\/credentials<\/code> routes.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li><strong>Generate site summary<\/strong> on llms.txt: optional AI button writes the one-line Site summary\nintro for review (page list still built locally). Uses a new <code>llms_intro<\/code> API op; hidden until\nnetotraffic.com exposes <code>llms_intro_cost<\/code> on ping.<\/li>\n<li>Removed <strong>Citation monitor<\/strong> submenu and citation-check feature.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fixed LLMs &amp; schema (and Citation monitor) admin pages rendering as raw HTML: building the AI\ncrawlers report no longer calls WordPress's do_robots(), which was sending Content-Type:\ntext\/plain during admin page render.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Admin labels use descriptive names instead of brand stuffing: <strong>Content Health<\/strong> menu,\n<strong>LLMs &amp; schema<\/strong> and <strong>Citation monitor<\/strong> submenus, <strong>Health score<\/strong>, <strong>Issues on this page<\/strong>\neditor metabox, <strong>Expertise &amp; credentials<\/strong> on author profiles, and a neutral robots.txt comment.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Renamed admin labels to NetoTraffic branding: top menu <strong>NetoTraffic<\/strong>, <strong>Site audit<\/strong> report,\n<strong>AI Discovery<\/strong> (llms.txt, crawlers, schema), <strong>Mention tracker<\/strong> (citation checks), and\n<strong>Audit score<\/strong> (was \"Health score\" \/ \"Content Health score\") \u2014 distinct from competing plugins.<\/li>\n<li>Fixed AI Discovery and Mention tracker pages breaking when the full report script loaded on them.<\/li>\n<li>robots.txt rules now credit <strong>NetoTraffic Content Suite<\/strong>, not a generic product name.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Moved off the Tools submenu onto its own top-level <strong>Content Health<\/strong> menu, with two new\nsubmenu pages \u2014 <strong>Technical AEO<\/strong> and <strong>Citations<\/strong> \u2014 rather than more tabs on an already\ncrowded Report screen. The Report\/Settings\/AI KEY\/Help experience itself is unchanged.<\/li>\n<li>New <strong>Answer Density<\/strong> score (0-100) on the Report tab: how many question-shaped headings lead\nstraight into a real answer, extending the existing hard-to-skim structure check.<\/li>\n<li>New <strong>Technical AEO<\/strong> page: an <strong>llms.txt<\/strong> generator (virtual, never written to disk), <strong>AI\ncrawler controls<\/strong> (see and set Allow\/Block\/No rule per named bot, plus an optional visit log),\nand a <strong>Schema<\/strong> engine (Article\/FAQ\/HowTo\/Author JSON-LD, with a warning when your SEO plugin\nalready outputs a type).<\/li>\n<li>New <strong>Content Blocks<\/strong>: TL;DR, FAQ and Pros &amp; Cons blocks (plus classic-editor shortcodes) with\nan optional \"Generate with AI\" button per block.<\/li>\n<li>New <strong>author credentials<\/strong> fields (job title, credentials, social links) on each author's own\nprofile screen, feeding the Schema engine's Author type and an optional author card shortcode.<\/li>\n<li>New <strong>Citation Tracker<\/strong> (Citations page): track a list of questions and check whether ChatGPT,\nPerplexity, Gemini and Claude cite your site for them, proxied through netotraffic.com, with a\nhistory kept for trend.<\/li>\n<li>If you have Google Search Console connected: the OAuth redirect URI moved from\n  tools.php?page=... to <code>admin.php?page=...<\/code> along with the menu change above. Already-connected\nsites keep working with no action needed; only a brand new \"Connect Google Search Console\"\nclick needs the updated URI added to your Google Cloud project (Settings tab shows the current\none to copy).<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Link health: removed the estimated-time-remaining readout (its measured rate was too noisy on\nslow\/inconsistent hosts to be reliable) in favor of a plain \"this can take several minutes on a\nlarge site\" note.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Link health: choose how many links to check per run (default 500) before pausing with a\nContinue button, an estimated-time-remaining readout while checking runs, and a short note that\nthe check needs this tab to stay open.<\/li>\n<li>Version bump to force browsers to fetch the current admin.js\/admin.css instead of a cached copy\nthat was occasionally missing the link map button.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Content audit, nine checks: missing meta descriptions, weak title tags, thin content, stale\nposts, missing internal links, missing image alt text, orphaned pages, hard-to-skim structure\n(GEO\/AEO signals: missing subheads, a broken heading outline, unanswered question headings,\nwall-of-text paragraphs), and posts by an author with no bio (an E-E-A-T trust signal). The\nauthor-bio report links to the author's own profile screen, not the post, since that is where\nthe fix lives.<\/li>\n<li>A single Content Health score (0-100) next to the scan button, the same weighted scoring \"Fix\nthese first\" uses, averaged across every scanned post rather than ranked into a shortlist, with\nits change since the last completed scan shown alongside it.<\/li>\n<li>Corpus report: duplicate content, overlapping content (\"covering the same ground\"), duplicate\nmeta descriptions, merge candidates and missing-pillar pages, computed from the same scan with\nno AI and no network call. Duplicate groups can 301 the losing pages to the keeper with one\nclick, with Undo; missing-pillar and not-covered findings can spin up a draft page straight into\nthe AI article-writing flow, optionally starting from an AI content brief that proposes an angle\nand outline before you commit to drafting.<\/li>\n<li>Link health tab: active redirects, orphan pages, and an optional broken-link\/broken-image\nchecker, on one screen. The checker is its own batched, button-triggered pass \u2014 the only\nfeature in the plugin that contacts a URL other than your own site, and the only reason it is\nnot simply part of the main scan.<\/li>\n<li>A \"Fix these first\" shortlist ranking posts by how much fixing them changes, with a cornerstone\nstar to weight a site's important pages higher regardless of issue count, and an eye icon\nshowing which flagged pages Google Search Console confirms are actually being shown in results.<\/li>\n<li>A Help tab explaining every button and badge on the Report tab in plain language.<\/li>\n<li>Adapters for Yoast SEO, Rank Math, SEOPress and All in One SEO (read-only), plus a standalone\nmode for sites with no SEO plugin.<\/li>\n<li>Optional AI fixes through netotraffic.com: meta description rewrites, title tag rewrites, image\nalt text, an author bio for authors missing one, subheadings for posts with none, a rewrite for\nwall-of-text paragraphs and unanswered question headings, internal link suggestions in both\ndirections (suggestion-only, never auto-inserted), section-by-section refreshes for stale posts,\nand full article drafts for thin posts (outline approved first, draft read and saved manually).\nEvery write has a per-post Undo. A \"Fix heading levels\" repair for a skipped heading level (e.g.\nH2 straight to H4) needs no AI and no credits.<\/li>\n<li>Bulk review flow for AI drafts: batches are drafted for review, editable and individually\ntoggled off, before anything is saved.<\/li>\n<li>Optional Google Search Console connection (Settings tab), bring-your-own Google Cloud project,\nno broker \u2014 disconnected by default, nothing changes for any install that never clicks Connect.\nWhen connected: the stale-content check tells \"still ranking, just old\" apart from \"actually\ndeclining\" using real click\/impression trend instead of age alone, a \"High visibility, low\nclicks\" card and a \"Competing with your own page\" card appear, and \"Fix these first\" weighs\npages Google actually shows above identical issues on pages nobody sees.<\/li>\n<\/ul>","raw_excerpt":"Audit every post for missing descriptions, weak titles, thin or stale content, missing alt text and orphaned pages, plus a Health score.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360572"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/netotraffics"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360572"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360572"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360572"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360572"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360572"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}