=== DigitalM InsideSEO ===
Contributors: insideseo
Tags: seo, audit, woocommerce, analytics, structured-data
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 0.270.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

An honest SEO mirror for WordPress and WooCommerce. Shows what search engines and AI assistants really see, and why visitors do not buy.

== Description ==

**DigitalM InsideSEO shows you the truth about your site, not a flattering "SEO score 85/100" but concrete facts and real errors.**

Instead of a vanity score, InsideSEO explains problems in plain language: "84 people could not reach checkout, here is why and how to fix it." Everything runs on your own site, and it reads the fields of your existing SEO plugin instead of replacing it.

= Who it is for =

* **WooCommerce stores** that get traffic but not enough sales.
* **Service businesses** that want to measure calls, emails and form submissions.
* **Blogs and content sites** that want to know which content brings real results.

= The Mirror, what search engines see =

The home screen is a single honest snapshot of your site: how many pages are indexable, which structured data types exist and which are missing, whether AI assistants can reach your content, and where titles, descriptions and H1s are missing or problematic. Numbers are measured from your real pages, not estimated.

= Error audit, over 110 automated checks =

The SEO screen runs more than 110 checks on your pages and groups the findings by priority, hardest first. The checks cover:

* **Indexability** - site-wide "discourage search engines", noindex on important pages, canonical missing, duplicated, pointing elsewhere or broken.
* **Content** - thin content, low text-to-code ratio, images without alt text, generic or uninformative file names, alt text equal to the file name, orphaned images, near-duplicate products, dead products (published but never sold), empty categories, stale year in the title, missing H2, heading order skips.
* **Titles and meta** - missing, too long or too short titles, duplicated titles, missing, too long, too short or duplicated meta descriptions, missing or multiple H1.
* **URL hygiene** - overly long URLs, underscores, uppercase, non-descriptive slugs, crawl-eating filter parameters.
* **Structure and internal links** - broken links, orphaned pages, "traffic without checkout" (content that never links to a product or category).
* **Headers and security** - missing security headers and related response issues.
* **Technical head** - problems in the document head that affect crawling.
* **Performance** - server response time and render weight from your own crawl.
* **Schema / AEO** - missing or incomplete structured data (JSON-LD) per page.
* **Files** - sitemap and robots checks.
* **Multilingual and validity** - hreflang checks on multilingual setups.
* **Hidden Cyrillic** - invisible characters and mixed Latin/Cyrillic letters in SEO fields that quietly break search.

Each finding explains what it is, why it matters, where it is and how to fix it. You can fix titles and meta descriptions right there in the table, in bulk, and the check re-runs live so a fixed problem disappears on the spot.

= Reviewed and accepted issues =

Not every finding is a defect. A home page with no breadcrumbs, WordPress's "Uncategorized", a decorative image with an empty alt - these are fine as they are, but they used to come back on every crawl and clutter the plan. Now, on the findings that only a human can judge, you can mark one as reviewed with a reason (acceptable, client's request, by design, not technically possible, postponed until a date, external cause, false alarm) and a short note. Accepted findings drop out of the count, the monthly plan and the site score, but stay in a separate "reviewed and clarified issues" table so nothing is hidden. A postponed one returns on its own after the date, and if the page is edited after you accepted it, the row is flagged for a fresh look.

= Speed, from real visitors and your own server =

Speed is measured three ways: Google PageSpeed Insights field data from the last 28 days (how your real visitors experience the site), a lab test, and the plugin's own load test that opens your pages and measures the server, the files, the plugins and the database queries. On top of the Google score it runs 31 of its own checks across server and WordPress, delivery, caching, fonts and plugins.

A standout is "**what a plugin costs**": the plugin loads one of your pages with a single plugin's files disabled, just for that request, and measures the difference - so you can see which plugin is actually slowing you down. You also get a page-weight breakdown by source, the slowest pages, a month-by-month history, a before/after view, and an optional comparison against up to three competitor URLs. All of it is free.

The checks catch the things that hurt real load the most: a lazy-loaded, oversized or old-format main (LCP) image, several oversized images on one page, fonts loaded from a third party, a missing font-display hint, a missing preconnect to an external host, and tracking scripts that fire before the visitor has consented. A dedicated "external calls" measurement shows how long your server spends waiting on third-party sites while it builds the page.

= Optimization log =

Every time you change a speed or file-loading rule, the plugin records it together with the numbers from just before, and fills in the "after" numbers from the next test - so you can prove a change helped or undo it. You can add a manual note too, such as "switched host" or "changed theme".

= Asset loading, which files load where =

A per-page view of which CSS and JavaScript files load on which pages, so you can stop a plugin's files from loading where that plugin is not used - one button clears all your shop's files from the pages that have no shop on them. The plugin detects your cache plugin and whether it can defer scripts, gives you a ready exclusions list to copy into it, and warns you when another optimization plugin (Perfmatters, Asset CleanUp and similar) is already doing the same job, so two tools do not fight over it.

= Rankings =

Connected to Google Search Console, the Rankings screen shows keyword positions and page positions, won and lost positions, and queries close to the top 10 so you can see quick wins. A rank tracker follows specific keywords day by day.

= Duplicate content =

Finds pages, products, categories and tags with near-identical text - the kind that makes Google unsure which one to rank. Each overlap is graded (over 70% red, 40-69% amber) and shows exactly which other pages it collides with and by how much.

= Spelling and proofreading =

A real spell checker for your site content, built for Bulgarian and 19 other languages. It combines rule-based checks, a full LibreOffice dictionary (licences included, nothing sent to a third-party server) and grammar rules, and it never blocks a save - it only suggests. You keep a personal "my dictionary" so brand names and terms are never flagged again, and product and category names are skipped automatically.

= GEO / AEO, readiness for AI assistants =

A dedicated screen checks whether AI assistants (ChatGPT, Claude, Perplexity, Gemini and others) can reach your site, lists every AI bot with its robots.txt access, checks the structured data they understand, and shows the traffic and sales that already come from them. The plugin can also serve an **llms.txt** map of your key pages and products for AI crawlers, turned on or off from this screen.

= Conversions and traffic (every site type) =

The Conversions & Traffic screen works for every kind of site, not only stores. WooCommerce stores see orders by channel (Google, Facebook, direct and others), revenue, a net-sales figure (minus VAT, shipping and refunds) and ROAS when you add an ad-spend file. Service sites and blogs see conversions as goals: calls, emails, form submissions, bookings and newsletter sign-ups. A Traffic sub-tab shows visitors, channels, devices, countries, cities and languages from GA4 for any site. Every figure is shown against the previous period of the same length, so you see the trend, not just today's number.

= Content planning =

A Content view compares your existing articles against the topics your site should cover: it flags thin, cannibalizing or stale articles, finds topic gaps for new articles, and flags missing categories and tags, all read live from your own data.

= Crawl =

A full on-demand crawl of your own site detects broken links and orphaned pages, duplicated or broken canonicals and problematic filter URLs, and feeds the audit above - run as often as you like.

= Change history =

A change history records edits to titles, meta descriptions, alt text and file names, showing who made each change and when, and measures the effect three ways (30 days before vs after, month over month, and year over year) so you can see what actually moved.

= Site guide and system information =

A built-in Guide maps every feature to the tab it lives in and answers "where do I do X". A System information screen shows your SEO plugin, cache plugin, site type, sitemap, tags, PHP and WordPress details in one place for quick diagnostics.

= Highlights =

* **A mirror, not a lie** - concrete facts, no sugar-coating.
* **See why you do not sell** - sales by channel plus checkout diagnostics.
* **Real speed insight** - three data sources and the unique "what a plugin costs" measurement.
* **Accept what is fine** - mark a finding as reviewed with a reason so it stops cluttering the plan and the score.
* **Control which files load** - stop a plugin's CSS and JavaScript from loading on pages that do not use it.
* **Spelling built in** - a genuine proofreader for 20 languages with your own dictionary.
* **AI readiness** - checks for ChatGPT, Claude, Perplexity and Gemini visibility, plus an llms.txt map.
* **Your data stays on your site** - the data is stored on your own WordPress install, not in a foreign cloud.
* **Works alongside your SEO plugin** - it reads the fields of Yoast, RankMath, SEOPress and All in One SEO instead of replacing them.

Everything above is free and fully functional, with no time limit and no locked features. A separate Pro add-on (offered from our own site, not required) adds AI suggestions and agency tools; this plugin works completely on its own without it.

= Requirements =

* WordPress 6.2 or newer
* PHP 8.1 or newer
* WooCommerce (optional, for sales data)
* Google Search Console and GA4 accounts for full data

== Installation ==

1. Upload the plugin folder to `/wp-content/plugins/`, or install it directly from the WordPress admin.
2. Activate the plugin through the Plugins menu in WordPress.
3. Follow the setup wizard, or open Settings and connect Google Search Console and GA4.
4. Run the first audit from the SEO screen.

== Frequently Asked Questions ==

= Is the plugin free? =

Yes. Everything in this plugin works forever with no time limit and no locked features.

= What data do you collect and where do you store it? =

The plugin collects data about the SEO health of your site (titles, meta descriptions, speed, rankings). This data is stored on your own WordPress site, not on our server.

= Does it work with Yoast SEO, RankMath, SEOPress or All in One SEO? =

Yes. InsideSEO is built to work alongside them, not to replace them. It reads the meta data from the active SEO plugin and adds deeper analysis.

= Do I need Google Search Console and GA4? =

Not strictly, but they are strongly recommended. Without them you will not see rankings, impressions, CTR and traffic data, only the technical checks.

= Does it support multilingual sites? =

Yes. It runs hreflang checks automatically when it detects a multilingual setup.

= Will the plugin slow down my site? =

No. Scans run in small batches and never block a page load.

= What is llms.txt? =

It is a small map of your key pages and products for AI crawlers, served at yoursite.com/llms.txt. You can turn it on or off from the GEO/AEO screen.

= Do you support AI assistants (ChatGPT, Claude, Perplexity, Gemini)? =

Yes. The GEO/AEO screen checks whether AI bots can reach your site, whether you have structured data they understand, and whether your content is ready to be quoted.

== Screenshots ==

1. Mirror, what search engines see about your site
2. Audit, a full list of issues with priorities
3. Sales, orders by channel and conversions
4. Ranking, positions, winners and losers
5. GEO/AEO, readiness for AI assistants
6. Settings, site type and Google connection

== Changelog ==

= 0.270.5 =
* New: reviewed and accepted issues - mark a finding as reviewed with a reason and a note, so it drops out of the count, the plan and the score but stays in its own table; postponed ones return after their date.
* New speed checks (main image lazy-loaded, oversized or old format; several oversized images; third-party fonts; missing font-display; missing preconnect; tracking before consent) and a new "external calls" server measurement.
* New: an optimization log that records each speed and file-loading rule change with the before/after numbers, plus a per-page view of which CSS and JavaScript load where, cache-plugin detection and a warning when another optimization plugin is doing the same job.
* Keyword impression counts now match Google Search Console exactly, and traffic figures are shown against the previous period.
* Documentation: the readme now describes the above. This release also carries the earlier Plugin Check clean-up (file-level annotations on internal data-layer queries, recommended WordPress file functions, unslashed and sanitized admin inputs, a translators note) with the stable tag aligned to the version. No change in behaviour for the code-quality items.

= 0.267.10 =
* English interface completed. The Spelling screen and its whole panel are now translated, along with a set of labels that were still showing in the source language: the database table names on the System information screen, the "Orders" metric, and the broken-install notice. Every interface string in the plugin and its scripts now has an English translation.

= 0.267.9 =
* Plugin Check: the proofreading data layer now suppresses the direct-query warnings at file level (internal core tables, all values through prepare), clearing the last "incorrect number of replacements" warning on its post lookup.

= 0.267.8 =
* Plugin Check: aligned the stable tag with the plugin version; the new proofreading and task-queue data layers now suppress the direct-query warnings at file level (internal tables, values passed through prepare); the proofreader AJAX handlers note that the nonce and capability are verified in their guard; and the queue on/off, URL and ID inputs are now unslashed and sanitized.

= 0.267.1 =
* Money is no longer taken as proof that the meaning check succeeded - a truncated answer is paid for too. The flag travelling with the answer decides; the cost is only consulted when talking to a hub old enough not to send one. This is what was wiping grammar and style notes on a re-check.
* A single-item check reports the real number of texts read instead of always saying one.

= 0.267.0 =
* A re-check no longer erases what only the model can find. Grammar, meaning and style notes survive a pass in which the meaning check did not run - because it failed, was switched off, or the limit was gone - instead of being wiped by the dictionary-only result. They are dropped only when a real meaning pass replaces them.

= 0.266.99 =
* The Fix button no longer appears on advice. A model answering a grammar note sometimes returns an instruction - "lower case for common nouns and finish the sentence" - rather than replacement text, and writing that into the page would destroy the sentence. A suggestion now earns its button only if it reads like a literal replacement: short enough, no brackets, quotes or "e.g.", and sharing at least half its words with the text it replaces. Everything else says "fix by hand".
* The same test runs server-side, so an old page left open in a tab cannot push advice into the content either.

= 0.266.98 =
* A run that was charged for is a run that happened. If the hub billed the request, the meaning check is reported as done even when the flag travelling with it says otherwise - which it could, when an older paid plugin passed the hub's own "I handed this to the site" marker straight through.
* When it really did not run, the line now names who was asked and how many texts were sent, so the reason is on screen instead of guessed.

For older versions, see changelog.txt in the plugin folder.


== Upgrade Notice ==

= 0.212.0 =
The plugin was renamed to DigitalM InsideSEO and streamlined. Your data is preserved.

== External Services ==

DigitalM InsideSEO may communicate with the following external services when you use specific features.

= seo.digitalmseo.com (our service) =

* **What**: the Google connection uses our service as a connection helper, so you do not have to create your own Google Cloud project.
* **When**: only when you click "Connect Google account".
* **What is sent**: your site URL, plugin version, and a public verification key. Google tokens are stored only on your own site; our service never stores them.
* **Privacy Policy**: https://seo.digitalmseo.com/en/privacy-policy/
* **Terms of Use**: https://seo.digitalmseo.com/en/terms/

= Google APIs (optional) =

* **What**: Search Console API and GA4 API.
* **When**: when the user connects their accounts.
* **What is sent**: OAuth tokens and data requests.
* **Policy**: https://policies.google.com/privacy

= AI provider APIs (optional) =

* **What**: AI suggestions for questions (FAQ) and schema on the GEO/AEO screen.
* **When**: only when the user explicitly clicks a "Suggest" button, using the AI provider configured in WordPress (WordPress 7.0 Connectors) or the user's own API key.
* **What is sent**: page context (title, content excerpt).
* **The user pays their AI provider directly; we never see or store the key on our servers.**

== Credits ==

Built by Digital M SEO Ltd (digitalmseo.com).
