=== SEO Fury – Lightning-Fast SEO + GEO: Schema, Redirects, llms.txt & More ===
Contributors: viktorosh
Tags: seo, schema, sitemap, redirects, ai seo
Requires at least: 5.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.7.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

50+ SEO & GEO tools: Search Console, redirects, 20+ schema types, sitemaps, IndexNow, llms.txt, robots.txt editor. Rank on Google, get cited by AI.

== Description ==

**SEO Fury** is a complete WordPress SEO toolkit built for speed. 50+ features, no front-end scripts by default, no bloat.

**SEO + GEO in one plugin.** Classic search optimization AND Generative Engine Optimization: llms.txt tells ChatGPT, Perplexity and other AI assistants what your site is about, 20+ schema types make your content quotable by AI Overviews, and the robots.txt editor decides which bots may read you. Rank on Google — and get cited by AI.

Most SEO plugins make you choose: either a lightweight tool with missing features, or a full-featured beast that slows your site. SEO Fury gives you everything — schema, sitemaps, redirects, analytics, readability analysis, and more — without adding a single millisecond to your page load time.

= Why SEO Fury? =

* **50+ features, zero bloat** — Every feature loads only when needed. No unnecessary scripts on your frontend.
* **Unlimited redirects & 404 monitoring** — No artificial limits. Manage as many redirects and 404 logs as your site needs. For free.
* **Google Search Console built in** — Connect GSC directly in the free version. View clicks, impressions, and positions inside WordPress.
* **IndexNow built in** — Notify Bing, Yandex and other IndexNow engines the moment you publish. Free, not locked behind a paywall.
* **Advanced readability analysis** — Flesch Reading Ease score, passive voice detection, transition words check, keyword synonym matching — features other plugins charge for.
* **20+ schema types with visual builder** — Article, Product, FAQ, How-To, Recipe, Event, LocalBusiness, and more. No code required.
* **One-click migration** — Import from Yoast SEO, Rank Math, All in One SEO, and SEOPress in seconds. Keep your meta titles, descriptions, redirects, and schema.
* **A dashboard you arrange yourself** — drag the tiles and cards into the order you want, hide the ones you never read, and switch on a Search Console graph, your top search queries and your latest PageSpeed results. Saved per user account, in a redesigned admin with a light / dark / auto theme.
* **7 languages included** — English plus Russian, German, French, Spanish, Italian and Portuguese translations ship with the plugin.
* **White Label ready** — PRO users can fully rebrand the plugin for client sites.

= Core Features (All Free) =

**Meta & Content Optimization**

* Meta titles & descriptions with 15+ dynamic variables
* Focus keyword analysis with synonym and morphological matching
* Secondary keywords tracking with presence indicators
* SEO score (0-100) with 13 on-page checks
* Readability score with Flesch Reading Ease (English + Russian)
* Passive voice detection and transition words analysis
* SERP preview — desktop, mobile, Facebook, and Twitter/X
* Open Graph & Twitter Cards with image customization
* Canonical URL management
* SEO fields for categories, tags and custom taxonomy terms — title, description, robots, canonical and social image

**Technical SEO**

* XML & HTML sitemaps with per-post-type control
* News & Video sitemaps (YouTube/Vimeo auto-detection)
* Unlimited 301/302/307 redirects with regex and hit tracking
* Unlimited 404 error monitoring with referrer tracking and IP logging
* Auto-redirect on URL slug change — never lose link equity
* Robots.txt visual editor with per-bot rules
* SSL & HTTPS security module — force HTTPS, fix mixed content, HSTS headers
* .htaccess editor with syntax highlighting and backup
* Hreflang tags — auto-detect WPML, Polylang, TranslatePress, or set manually

**Schema & Structured Data**

* 20+ schema types with visual builder — no coding needed
* Schema Templates — create once, apply to multiple posts
* LocalBusiness & Organization schema for homepage
* WooCommerce Product schema with price, stock, reviews
* Breadcrumbs with JSON-LD markup and shortcode support

**Author Box (E-E-A-T)**

* Author profile on every user: photo, job title, company, credentials, areas of expertise, 12 social networks and extra profile URLs
* Author box under the content (per post type), or anywhere via `[seo_fury_author]`, `seo_fury_author_box()` — works with Elementor, Bricks, Mosaic, Divi and theme templates
* The same profile feeds the Person in your Article schema (sameAs, jobTitle, knowsAbout, worksFor, hasCredential) and a ProfilePage on author archives
* Responsive, dark-mode aware, no jQuery

**Post Views**

* Counts views of posts and pages with a tiny script that works with page caching and skips bots; no personal data stored
* Counter after the content, or anywhere with `[seo_fury_views]`, a block or PHP; most viewed lists with `[seo_fury_most_viewed]`, a block and a widget
* Sortable Views column, editor box, WordPress Dashboard panel; import from Post Views Counter, WP-PostViews, Page Views Count and Statify

**Content Tools**

* Table of contents from the headings — inserted automatically (before or after the first heading, after the first paragraph, top or bottom) or with a block / `[seo_fury_toc]`; nested or flat, numbered, collapsible, smooth scrolling, light and dark; short Latin anchors (Cyrillic transliterated) for "Jump to" links; works with Elementor and other page builders
* Reading time — "5 min read · Updated 12 September · 1,240 views" before or after posts, a block, `[seo_fury_post_info]`, and timeRequired / wordCount in the Article schema
* Duplicate — copy posts and pages with content, taxonomies, custom fields, page-builder layouts and SEO settings; the copy is saved as a draft
* Shortcodes of LuckyWP Table of Contents, Easy Table of Contents, Table of Contents Plus and Reading Time WP keep working after you remove those plugins; settings import from LuckyWP and Reading Time WP

**Privacy & Consent (152-ФЗ / GDPR-style)**

* Cookie banner — editable text and buttons, cookie icon, position (bar, card, modal), colours, button style, live preview in settings
* Consent categories (necessary / analytics / marketing), consent cookie, Google Consent Mode v2, gating of any script with `data-sf-consent`, optional auto-blocking of known trackers (Yandex Metrica, GA, GTM, VK, Top.Mail.Ru, …) until consent
* Privacy policy and consent-to-processing documents generated from your business data (Local SEO + operator fields), in Russian (152-ФЗ structure) or English, as shortcodes on auto-created pages
* Consent checkbox in forms: comments, registration, Contact Form 7, WPForms, WooCommerce checkout, or any form via JavaScript
* Consent log (date, source, choice, page, masked IP) with CSV export and retention

**SEO Fury Writer (free add-ons)**

* The same SEO and readability analysis inside Google Docs, Microsoft Word (365) and LibreOffice / OpenOffice while you write — free, no account: seo-fury.com/writer
* One click sends the document as a draft to your site with headings, lists, links, images and the SEO fields filled in

**Local SEO**

* Business profile — name, type, address, phone, e-mail and price range, output as LocalBusiness schema
* Opening hours for the whole week — fill Mon-Fri, Mon-Sat or every day in one click, then adjust any day or mark it as a day off
* Geo coordinates and service area for local search
* Works alongside the homepage Organization schema

**Analytics & Indexing**

* SEO panels on the WordPress dashboard (Dashboard → Home) — overall score, redirects, unresolved 404s, images without alt text, a site-health checklist and the issues worth fixing first
* Customizable dashboard — reorder and hide widgets: SEO score, redirects, 404s, images without alt, Search Console graph, top queries, PageSpeed results, site-health checklist
* Google Search Console integration (OAuth 2.0) — free
* IndexNow — notify Bing, Yandex on publish/update
* Google PageSpeed Insights — Core Web Vitals scores in WordPress
* Site Verification — Google, Bing and Yandex, plus a custom meta tag for any other service

**Image SEO**

* Auto alt text from post title and filename templates
* Title attribute generation
* Customizable template with variables: {post_title}, {filename}, {site_name}

**Tools & Utilities**

* llms.txt — a Markdown summary of your key pages for AI assistants (auto-generated, pick post types, edit by hand)
* SEO Revisions — history of title, description, focus keyword, robots and canonical changes with one-click restore
* Frontend SEO Inspector — admin bar button to inspect any page
* Import/Export — backup settings as JSON, restore on another site
* Elementor integration — full SEO panel inside the page builder
* Plugins you no longer need — spots active plugins whose job SEO Fury already does and helps you switch them off safely

= SEO Fury vs. Competitors =

Where the free version of SEO Fury differs from the free and paid versions of Yoast SEO and Rank Math (checked September 2026):

* **Redirects and 404 monitor** — SEO Fury: both free, unlimited. Yoast: redirects in Premium, no 404 monitor. Rank Math: both free.
* **Google Search Console** — SEO Fury: built in. Yoast: through the Site Kit plugin. Rank Math: built in.
* **Hreflang** — SEO Fury: included. Yoast: not available. Rank Math: not available.
* **Flesch reading score and passive voice** — SEO Fury: included. Yoast: included. Rank Math: not available.
* **Keyword variations (synonyms, word forms)** — SEO Fury: included. Yoast: Premium. Rank Math: not available.
* **News and video sitemaps** — SEO Fury: included. Yoast: Premium. Rank Math: PRO.
* **SEO revisions history** — SEO Fury: included. Yoast: not available. Rank Math: not available.
* **IndexNow** — SEO Fury: included. Yoast: Premium. Rank Math: included.
* **Schema** — SEO Fury: 20+ types and templates per post type. Yoast: basic set. Rank Math: 18 types (840+ in PRO).
* **llms.txt** — all three generate it for free. SEO Fury PRO also shows which AI crawlers actually read your pages (AI Crawler Monitor) and can block the aggressive ones automatically.
* **White label** — SEO Fury: PRO. Yoast: not available. Rank Math: not available (branded e-mail reports only).
* **Starting price** — SEO Fury: free, PRO from $3/month, lifetime $300. Yoast Premium: $118.80/year. Rank Math PRO: $6.99/month, billed yearly.

= PRO Features (Addon) =

Unlock advanced capabilities with [SEO Fury PRO](https://seo-fury.com/#pricing):

* **AI Content Generator** — Write, expand and rewrite content, and generate meta titles, descriptions, social text and focus keyword suggestions for any post or page — with 6 AI providers (OpenAI, Claude, Gemini, Mistral, DeepSeek, OpenRouter)
* **AI Image Generator** — Create images with DALL-E 3, Stability AI, Flux Pro, and 4 more providers
* **AI Image Optimization** — Bulk optimize alt text using AI based on post context
* **Rank Tracker** — Monitor keyword positions across Google, Bing, Yahoo with trend charts
* **Index Status Tracker** — Check if pages are indexed in Google, Yandex, Bing
* **Google Analytics (GA4)** — Tracking code, dashboard widget, visitor analytics
* **Yandex Metrika & Bing UET** — Regional analytics integration
* **Backlink Checker** — Monitor backlinks via Ahrefs, Moz, DataForSEO, or Majestic
* **Link Assistant** — Internal linking suggestions while you edit
* **Content Decay Detection** — Alerts when content needs refreshing
* **Post Views Reports** — views by date for any period, rising and falling pages, traffic spikes, pages with traffic but a weak SEO score, CSV export
* **SEO Audit** — 75+ checks across content quality, E-E-A-T, crawlability, rendering and structured data. Runs on the server, so you can close the tab and come back later, and a repeat scan only re-checks the pages you edited
* **Search Console Reports** — up to 365 days of search performance in the admin, plus the same figures as a scheduled e-mail report
* **AI Search Traffic** — Track visits from ChatGPT, Perplexity, Claude, Gemini
* **AI & archive bot blocking** — One-click robots.txt rules for GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, archive.org and more
* **Site Schema Graph** — Organization and WebSite schema connected to every page
* **White Label** — Fully rebrand for client sites
* **Priority Support** — Direct access to the development team

Plans start at **$3/month**. [Lifetime option available ($300)](https://seo-fury.com/#pricing).

= Getting Started =

1. Install and activate SEO Fury
2. Go to **SEO Fury → General Settings** to configure basics
3. Use the **Migration Wizard** if switching from another SEO plugin
4. Edit any post to see the SEO metabox with analysis, schema builder, and social preview

Full documentation at [seo-fury.com](https://seo-fury.com/).

== Installation ==

1. Upload the `seo-fury` folder to `/wp-content/plugins/`, or install directly through the WordPress plugins screen (search "SEO Fury").
2. Activate the plugin through the 'Plugins' screen in WordPress.
3. Go to **SEO Fury** in the admin sidebar to configure settings.
4. (Optional) Install the [SEO Fury PRO](https://seo-fury.com/#pricing) addon for advanced features.

== Frequently Asked Questions ==

= Is SEO Fury really free with no limits? =

Yes. The free version includes 50+ features with no artificial restrictions. Unlimited redirects, unlimited 404 monitoring, Google Search Console, IndexNow, schema markup, sitemaps — all included. No trial, no expiration, no credit card required.

= Does SEO Fury slow down my site? =

No. SEO Fury loads admin features only in the dashboard. The frontend output is minimal — just essential meta tags, schema markup, and sitemap endpoints. By default it loads no scripts or stylesheets for visitors; the cookie banner, reviews and author box add their small files only on pages where you use them.

= Can I migrate from Yoast SEO, Rank Math, or AIOSEO? =

Yes. The built-in Migration Wizard imports all your SEO data from Yoast SEO, Rank Math, All in One SEO, and SEOPress with one click. Meta titles, descriptions, redirects, and schema are all preserved.

= Does SEO Fury work with WooCommerce? =

Yes. Automatic Product schema with price, stock status, and reviews. Custom SEO title templates for products, categories, and tags.

= Does SEO Fury work with page builders? =

Yes. Full compatibility with Gutenberg, Classic Editor, and Elementor. The Elementor integration includes a dedicated SEO panel inside the builder.

= What AI features are available? =

The free version includes advanced readability analysis (Flesch score, passive voice, transition words). PRO adds AI content generation, meta title and description writing, focus keyword suggestions, AI image creation, and AI-powered alt text optimization — with 6 AI providers (OpenAI, Claude, Gemini, Mistral, DeepSeek and OpenRouter, which in turn opens up any model in its catalogue).

= How does the license work? =

The free version works forever with no license. PRO licenses are per-site, starting at $3/month. A Lifetime option ($300) gives you all features forever with no recurring payments.

= What is GEO, and what does llms.txt do? =

GEO — Generative Engine Optimization — is about being found and quoted by AI assistants, not only by search engines. ChatGPT, Perplexity, Claude and Google's AI Overviews read pages, and they favour content that is clearly structured and easy to cite. SEO Fury helps on three fronts: llms.txt tells AI assistants what your site is about and which pages matter, 20+ schema types make your facts machine-readable, and the robots.txt editor lets you decide which AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others) may read your content at all. All of it is in the free version; one-click AI-bot and web-archive-bot blocking, the AI Crawler Monitor and automatic blocking of aggressive crawlers are PRO.

= Which features need PRO? =

Everything listed under "Core Features" above is free forever, including redirects, the 404 monitor, Search Console, IndexNow, schema, sitemaps, readability analysis and llms.txt. PRO adds the AI tools (content, images, alt text), Rank Tracker, Index Status Tracker, the site-wide SEO Audit, Link Assistant, Content Decay, Backlink Checker, analytics integrations (GA4, Yandex Metrika, Bing UET), historical Search Console reports, one-click AI-bot blocking, the site-wide Organization / WebSite schema graph and white labelling. The free plugin never nags for a licence key and never expires.

= Does the free version phone home? =

No. There is no background telemetry and no licence checking. The free version only contacts an external service when you use a feature that needs it: IndexNow submissions, PageSpeed analysis, Google Search Console (connecting and loading data), the Changelog tab, the Support tab, or the optional feedback form when you deactivate the plugin. Each one is listed under "External Services" below.

== Screenshots ==

1. SEO meta box in the post editor — title, description, focus keyword, SEO score with Flesch readability.
2. Schema markup builder — visual interface for 20+ schema types.
3. Redirect manager — create and manage 301/302 redirects with hit tracking.
4. XML Sitemap settings — per-post-type and taxonomy control.
5. Robots.txt editor — visual rule management with per-bot presets.
6. 404 Monitor — track and fix broken URLs with one-click redirect creation.
7. Page Speed — Core Web Vitals scores from the PageSpeed Insights API with improvement opportunities.
8. Google Search Console — view search performance inside WordPress.
9. Readability analysis — Flesch score, passive voice, transition words check.
10. Hreflang — auto-detect WPML, Polylang and TranslatePress, or set alternate language URLs manually.

== Changelog ==

= 1.7.2 =
Fixes from user feedback.

* No sideways scrollbar in the post sidebar in German and other languages with long words: the titles of the Table of contents, Post views and Article rating boxes now wrap instead of pushing the box wider than the sidebar.
* The SEO Fury editor sidebar can no longer scroll sideways.
* Long URLs wrap inside their column in the Blocked IPs list and the 404 log instead of running over the next columns.

= 1.7.1 =
Fixes and small improvements from user feedback.

* Tables line up again next to the Folders plugin, which added an empty "move to folder" column to every table on the plugin screens.
* No horizontal scrollbar in the post editor's SEO Fury sidebar (the Canonical URL field and the Table of contents box were a few pixels too wide).
* Settings tabs come last: Post Views now reads Overview, Reports, Tools, Settings; in Reviews, Analytics comes right after the reviews and Settings at the end.
* The dashboard's "Add widget" button sits in the page header line instead of taking a row of its own.
* The Image SEO and License screens use the full width of the window.
* The SEO score popup in the posts list can open the editor straight on the matching SEO Fury tab (Schema, Links, Advanced, the snippet's Social tab).
* Most viewed dashboard card: long titles end in "…" and the view counts stay in place.

= 1.7.0 =
Content Tools: a table of contents, reading time and one-click copies of posts and pages — three fewer plugins to keep.

**Table of contents (new)**
* Built from the headings of the rendered post, so it works with the block editor, the Classic editor, Elementor and other page builders.
* Inserted automatically before or after the first heading, after the first paragraph, at the top or at the bottom — or placed by hand with the "Table of Contents" block or [seo_fury_toc]; [seo_fury_no_toc] or the Table of contents box in the editor turns it off for one post.
* Heading levels, minimum number of headings, nested or flat list, nested or simple numbering, headings to skip, collapsible (open or closed at first), smooth scrolling with a space for sticky headers, colours that follow the theme or a light / dark box, full width or wrapped by the text.
* Every heading gets a short Latin anchor from its text (Cyrillic is transliterated), so the "Jump to" links Google shows stay readable; anchors a heading already has are kept.
* Replaces LuckyWP Table of Contents: its settings and per-post choices are imported in one click, and its [lwptoc] shortcode and block keep working, as do [ez-toc] and [toc].

**Reading time (new)**
* A line such as "5 min read · Updated 12 September · 1,240 views" before or after posts — reading time, publication date, last updated date (only when the post was changed) and the view count from Post Views, in any combination.
* Reading speed and time per image can be set; the text can be your own ("Reading time: {time} min"). Counts words in any alphabet and in Elementor layouts.
* The "Reading Time" block, [seo_fury_post_info], [seo_fury_reading_time] and seo_fury_get_reading_time() for themes.
* The reading time and word count are added to the Article structured data (timeRequired, wordCount).
* Replaces Reading Time WP: settings import, and its [rt_reading_time] shortcode keeps working.

**Duplicate (new)**
* "Duplicate" under every post and page in the lists, as a bulk action, in the Publish box of the Classic editor and in the block editor.
* Copies the content, excerpt, featured image, template, categories, tags, custom taxonomies, custom fields, page-builder layouts (Elementor, JetEngine…) and the SEO Fury settings; view counts, ratings, audit results and a canonical URL pointing at the original are left out.
* The copy is saved as a draft (or pending / private) with you as the author, so search engines never see two identical pages; an optional text can be added to its title.

**Plugins you no longer need**
* Now also spots LuckyWP Table of Contents, Easy Table of Contents, Table of Contents Plus, Reading Time WP, Duplicate Page, Yoast Duplicate Post, Post Duplicator and — with PRO — WPCode, Code Snippets and Header Footer Code Manager (only while they add header / footer code, never when they run PHP snippets).

**Translations**
* Every new text in Russian, German, Spanish, French, Italian and Brazilian Portuguese.

= 1.6.0 =
The big update: a new design for every screen, a post view counter, SEO fields for terms, and a full security and performance audit.

**New design**
* Every plugin screen redesigned — cards, switches, sub-tabs, tables and stat tiles in one style, in light and dark themes, readable on phones. A "New design" switch in the top bar returns to the classic look at any time.
* New Dashboard: an overview card with the average SEO score and setup progress (x/6), an Action plan that lists what to fix first, a full-width Search performance chart, and new widgets — SEO score distribution, Metadata coverage, Content freshness, New 404 errors per day, Most used redirects, Most viewed. Every tile has an "i" hint.
* The post editor in the new design: the SEO box in the Classic editor, the block-editor sidebar and the Elementor panel — a score ring with SEO / Readability / Extra meters, problems first, a Google preview like today's results page, length meters for title, description and permalink. Snippet editor, Schema Generator and Schema Editor windows redesigned.
* The SEO Fury panels on the WordPress Dashboard, the "Delete SEO Fury" dialog and all modals follow the new design.
* SEO Fury opens the plugins block of the admin menu; the menu bolt stays red on every screen.

**Post Views (new module)**
* Counts views of posts, pages and other public types — by a tiny script after the page loads (works with page caching, skips bots), through the REST API, or in PHP; a count interval per browser; bots, logged-in users, roles and IP addresses can be excluded; optional counting only after analytics consent. No personal data is stored.
* The counter after the content of posts by default, or anywhere with the [seo_fury_views] shortcode, the "Post Views" block or PHP; most viewed lists with [seo_fury_most_viewed], a block and a widget; sort any WP_Query by views; REST endpoints.
* A sortable Views column, the count in the toolbar, a Post views box in the editor, a WordPress Dashboard panel and two SEO Fury dashboard cards.
* Overview with views per day and the most viewed pages; import from Post Views Counter, WP-PostViews, Page Views Count and Statify.

**Also new**
* SEO fields for every category, tag and custom taxonomy term — SEO title and description, noindex / nofollow, canonical URL and social image. Canonical tags on the home page and all archives.
* "Plugins you no longer need" — SEO Fury spots active plugins whose job it already does (redirects, sitemaps, breadcrumbs, schema, cookie notice, IndexNow, llms.txt and more), says what to switch on first and offers to deactivate them.

**Security**
* Stored XSS through post Schema data and Schema templates closed; Schema templates, the .htaccess editor, robots.txt deletion and the IndexNow key file need the right role (super admin on multisite, DISALLOW_FILE_EDIT / DISALLOW_FILE_MODS respected); regex redirects can no longer send visitors to another site; the internal-link checker only requests your own site; ticket replies, the Writer API and CSV exports hardened.
* Sites connected to Search Console with one click no longer store the shared Google client secret — tokens are refreshed through the SEO Fury sign-in proxy; an old saved secret is deleted automatically.

**WordPress.org guidelines**
* One-click AI and web-archive bot blocking, the site-wide Organization / WebSite schema graph and White Label now live entirely in PRO. AJAX actions and database tables use the seo_fury_ prefix (existing data moves automatically). Inline scripts go through the WordPress script API; the "External services" section was rewritten.

**Performance and fixes**
* Faster redirects, 404 logging, sitemaps, dashboards and bulk Schema actions; the posts list no longer runs audits while it loads; old log rows are pruned.
* Fixed: the Search Console chart could fall back to plain bars; dark-mode problems (white Schema generator, white checkboxes, glowing dividers); doubled divider lines and cards inside cards; a PHP warning on the Dashboard.
* Accessibility: better keyboard and screen-reader support, right-to-left layouts; titles no longer show codes like &#8211;.

**Translations**
* Plural forms and translator notes throughout; every new text in Russian, German, Spanish, French, Italian and Brazilian Portuguese.

= 1.5.5 =
* Added: Support tab: tickets and ideas are now kept per site. By default the list shows only what was sent from this WordPress install; a "This site / All sites" switch shows everything in your SEO Fury account, with the site each item came from. Items from your other sites are counted under the list so they never go missing.
* Added: every block on the plugin screens can be collapsed with the arrow next to its title — handy for settings you set up once (API keys, bot protection, cache settings) so the daily charts move up. Collapsed blocks are remembered per user; the arrow opens them again.
* Fixed: Page Speed in dark mode — the score inside the ring, the metric cards (FCP, LCP, TBT, CLS, SI, TTI), the Mobile/Desktop switch and the empty score badges stayed light and hard to read.

= 1.5.4 =
* Added: robots.txt: crawlers blocked in the SEO Fury PRO AI Crawler Monitor (by hand or by its automatic Bot protection) are written into the "Block AI bots" group of your virtual robots.txt and shown on the Robots.txt tab. New filter `seo_fury_robots_blocked_ai_bots` for developers.
* Changed: readme comparison with Yoast SEO and Rank Math re-checked against their current versions (September 2026): both now generate llms.txt, Rank Math's redirects and 404 monitor are free, Yoast Premium costs $118.80/year.

= 1.5.3 =
* Added: Meta Titles: an image for the social preview of every section (home page, archives, each post type and taxonomy) plus a site-wide default image in General Meta. It is used for og:image and twitter:image when a page has no image of its own.
* Improved: Meta Titles: title and description fields use the full width and a long description wraps, so the whole template is visible; the Google preview uses readable colours in the dark theme.
* Improved: Meta Titles: the section menu stays in place while you scroll and no longer jumps when you switch sections.
* Improved: Row actions are compact icon buttons in one line (Schema Templates, Redirects, 404 log, review moderation, sitemap extra URLs).
* Improved: Dark theme: filled buttons, links in tables and the Support buttons have readable contrast.
* Fixed: Redirects and 404 log: on screens around 1200 px wide the URL columns shrank to nothing.
* Fixed: Table headers no longer break in the middle of a word (e.g. long Russian or German labels).
* Fixed: Schema template JSON-LD preview was white in the dark theme.
* Fixed: Some buttons that should stay hidden until needed were always visible.
* Fixed: Internal linking panel in the editor was partly untranslated.

= 1.5.2 =
* Added: 404 log: pages instead of a fixed first 100 entries (25–200 per page), a status filter and search by URL or IP.
* Added: 404 log: checkboxes with “select all” (also across pages) and bulk actions — mark resolved or active, redirect all to one URL, block their IP addresses, delete.
* Added: Schema: save any page’s Schema as a named template straight from the editor (save icon on each schema) and apply it to other pages.
* Added: Schema templates for a whole post type (Meta Titles → post type): check & preview warns about page-specific fields holding fixed text and shows the result on your latest posts; use a template as the post type’s default (linked — later template edits apply everywhere, a post’s own Schema still wins) or copy it into posts (only those without Schema, or all) with a one-step undo.
* Improved: Schema Templates: one “Add new” button, a labelled name field, default name “{type} - custom”, errors shown inside the dialog.
* Improved: Every SEO Fury dialog (Schema generator, editor, constructor, AI) uses one control style: same height, borders, focus ring and icon buttons; the Schema editor follows the dark theme.
* Improved: Editor sidebar, Schema tab: buttons aligned, long template names wrap instead of running under the icons.
* Fixed: Schema editor: the non-working buttons next to “Article type”, “Author type” and other dropdowns.
* Fixed: Dark theme: notices, disabled buttons, the robots.txt / .htaccess code editor and the “Not connected” badge were light or unreadable.

= 1.5.1 =
* Fixed: form labels on the Reviews screens always sit above their field. A few single fields (review text and reply in "Add a review") had the label running into the field, and in the multi-column settings grids a wide text field could spill into the next column. Reported by a PRO customer.
* Fixed: in the dark theme, date and time fields were white and the browser's calendar opened in light colours. They now follow the dark theme, and so do the native select lists and number spinners.

= 1.5.0 =
* Added: Reviews tab (General group) — a reputation hub for the reviews your business already has and the ones it is about to get. Five sub-tabs: the moderation feed, the platforms you are listed on, display options, collection settings and import/export.
* Added: review collection on your own site. `[seo_fury_review_form]`, the "SEO Fury Reviews" block or auto-insert after the content of chosen post types puts a star-rating form on the page. Guests allowed or logged-in only, optional email, minimum and maximum length, a per-visitor cooldown checked against a hashed IP and a cookie (the address itself is never stored), a honeypot spam trap, and a hold-for-moderation switch. The Privacy & Consent module adds its consent checkbox to the form automatically.
* Added: the reviews you already have elsewhere. Add one by hand with its original author, rating, date and link, or import a CSV (source, author, rating, date, title, content, url, reply) — 25 platforms are recognised, from Google, Yandex Maps, 2GIS, Zoon, Flamp and Yell to Otzovik, Avito, Trustpilot, IRecommend, ProDoctorov, SberHealth, NaPopravku, Wildberries, Ozon and VK. The Sources sub-tab keeps your profile link, rating and review count for each of them.
* Added: three display layouts — list, grid and a compact rating badge — with the rating summary (average, stars, review count and the 5→1 breakdown), per-platform scores, clickable platform filters, "read more" clamping, review tags, photos and your replies. Light, dark or follow-the-visitor's-theme, your own accent colour, and a switch that shortens the surname to an initial so you publish less personal data.
* Added: Review and AggregateRating structured data merged into the page @graph. You choose what it attaches to — Product / Service / Course (the entities Google actually shows stars for), LocalBusiness / Organization, both, or a separate node — and a rating you entered by hand in the schema editor is never overwritten.
* Added: moderation tools — publish, unpublish, reply (the reply renders under the review), hide a single review from the widget, pin one to the top, mark as spam, delete, filter by status, platform and text, and export everything to CSV.
* Added: a live preview on the Display screen — the real front-end markup with the settings currently in the form, in desktop, tablet and phone widths, on a light or dark page. It renders inside a frame so the layout reacts to the previewed width the way it will on the site, and nothing is saved until you press Save Changes.
* Added: the Reviews screens are translated into German, Spanish, French, Italian, Portuguese and Russian.

= 1.4.0 =
* Added: ideas live on the Support tab. "New Idea" next to "New Ticket" submits an idea without leaving WordPress, and the table below lists tickets and ideas together, newest first, with the idea's status (in review, planned, in progress, shipped), its vote count and the team's note. Requested on the ideas board: "so we have everything in one place without leaving SEO Fury".
* Added: the version block in the sidebar shows the available version behind the installed one ("PRO: 1.6.3 → 1.6.4", linking to the Plugins screen) and has a "Check for updates" link that re-checks both the free plugin and the PRO addon on the spot. Requested on the ideas board.
* Fixed: with a "Plugin language" set in General settings, PRO screens came out half English. The language override reloaded only the free plugin's own translation files and silently dropped the catalogue the PRO addon adds; add-on catalogues now survive the reload. Reported by a PRO customer.
* Changed: the tab header on every SEO Fury screen is one line — the title and its short description sit side by side instead of stacked, so the header takes about half the height it did. Long descriptions are clipped with an ellipsis (hover for the full text); on phones the two still stack. Suggested by a PRO customer.

= 1.3.1 =
* Added: "Clear cache" button in the top bar of every SEO Fury screen. One click flushes the WordPress object cache, SEO Fury's own caches (sitemap, dashboard) and every caching plugin or host cache we recognise — WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache, Cache Enabler, Autoptimize, SiteGround Optimizer, Breeze, Hummingbird, Nginx Helper, WP-Optimize, Swift Performance, Comet Cache, FlyingPress, Cloudflare, Kinsta, WP Engine, Pantheon, Pagely, Elementor CSS — and tells you which layers were cleared. Developers can hook `seo_fury_purge_cache`. Requested on the ideas board: "sometimes you can't see the change, and in most cases it's a cache problem".
* Added: General → "Clear Cache Automatically" — optionally clears the site cache every time SEO Fury settings are saved, so title, meta and schema changes are visible right away.

= 1.3.0 =
* Added: REST endpoints for the free SEO Fury Writer add-ons (Google Docs, Microsoft Word, LibreOffice / OpenOffice — seo-fury.com/writer): `seo-fury/v1/writer/ping` and `seo-fury/v1/writer/post` create or update a draft with the content, slug, SEO title, meta description and focus keyword, authenticated with a WordPress application password (edit_posts).
* Fixed: with PRO active, the Author Box and the new Privacy & Consent tabs were listed under "Content & Links" instead of "General" in the sidebar (PRO inserts its content tabs right after Breadcrumbs and the group heading was inherited). Both now carry their own group, and free tabs keep their group label whatever an add-on does to the list. Reported by a PRO customer who could not find the Privacy module.
* Changed: the settings search also matches English aliases and the tab key, so "privacy" or "cookie" finds the Privacy & Consent tab even when the plugin language is German or Russian.

= 1.2.3 =
* Added: Privacy & Consent tab (General group) — personal-data compliance for 152-ФЗ and GDPR-style laws. Cookie banner with editable text and button labels, a cookie icon (or your own image), five positions (bars, cards, centered modal), background / text / link / button colours, outlined or solid pill buttons, corner radius, font size, shadow, page dimming, show delay, consent lifetime and a "consent revision" counter that re-asks every visitor; live preview next to the settings. Default look: white bar at the bottom with a 🍪 icon and an outlined "OK" button; texts follow the site language (Russian or English).
* Added: consent categories (necessary / analytics / marketing) with a settings panel, the `sf_consent` cookie, Google Consent Mode v2 (default denied → updated after the choice), gating of any script (`<script type="text/plain" data-sf-consent="analytics">`, iframes via `data-sf-src`) activated in place without a reload, optional auto-blocking of known trackers in the theme and other plugins (Yandex Metrica, GA, GTM, VK, Top.Mail.Ru, Facebook, TikTok…), a floating "Cookie settings" button, the `[seo_fury_cookie_settings]` shortcode / `.sfc-open` class to reopen the banner, and a `window.seoFuryConsent` JS API + `sfConsent` event. With PRO 1.5.3 the plugin's own Yandex Metrica / Google Analytics counters load only after consent.
* Added: privacy policy and consent-to-processing generator. Operator details (type, legal name, ИНН, ОГРН, address, contacts, responsible person, Roskomnadzor registry number) fall back to the Local SEO tab; tick the purposes, personal data, third parties / processors, storage period, data location and cross-border transfer, add your own clauses. Documents follow the 152-ФЗ art. 18.1 structure in Russian or a generic English version, render through `[seo_fury_privacy_policy]` / `[seo_fury_consent_text]`, and "Create page" makes the pages (and sets the WordPress privacy page). Previews and Copy HTML on the tab.
* Added: consent checkbox in forms — WordPress comments and registration, Contact Form 7 (forms without their own [acceptance]), WPForms, WooCommerce classic checkout (all validated server-side too), plus a JavaScript mode for any other form by selector (Elementor, Fluent Forms, theme forms) with browser-side validation. Text with {policy} / {consent} links and the error message are editable.
* Added: consent log — banner decisions and form consents with date, source, choice, categories, page, masked IP, browser and user; CSV export, retention period, clear. Proof of consent for a supervisory-authority request.
* Changed: Preferences → the menu is now organised in sections. Drag items between sections, drag whole sections, rename them, add your own or delete empty ones — the sidebar headings follow your layout instead of the item's original group (a moved item used to drag its old heading along, requested by a PRO customer). Layouts saved by 1.2.2 are migrated: items keep their order under their original headings.

= 1.2.2 =
* Changed: the plugin screen now fills the whole area under the WordPress admin bar — no page title above it, no grey margin or white frame around it, and the logo lives at the top of the left menu. Makes a big difference with the dark theme (requested by a PRO customer). The filter `seo_fury_admin_full_width` (return false) restores the framed layout.
* Changed: admin notices and "Settings saved" messages now appear inside the content column, under the search bar, instead of above the plugin.
* Added: a small "★★★★★ Rate SEO Fury on WordPress.org" pill in the top bar. Closing it (or rating) hides it for good; not shown in white-label mode.
* Added: Italiano and Português (Brasil) in General Settings → Plugin Language — both catalogues shipped for a while but were missing from the list.
* Added: the Dashboard is now a real board — drag any widget by its grip to move it, drag its right edge (or pick Small / Medium / Large / Full width in the gear menu) to resize it, and hide it from the same menu. "Add widget" lists everything that is hidden. KPI tiles drag from anywhere, cards from their title. Every widget can be renamed and has its own display settings: the SEO score as gauge or number, the 404 counter for all time / 7 / 30 days, the Search Console summary with a choice of metrics and the previous-period comparison, the chart as lines or bars with either series, top queries / pages and the 404 list with selectable columns, rows and period, Site health as "problems only". Layout, sizes and settings are saved per user.
* Added: Preferences tab (last in the menu): hide the plugin sections you never use, drag the rest into your own order, and collapse the sidebar to icons only — the arrow at the bottom of the menu does that too. Per user.
* Changed: on the plugin screen the WordPress admin menu stays in place too and scrolls on its own when it is taller than the window (its fly-out submenus still open next to the hovered item).
* Changed: the Changelog tab shows Free and PRO as a switch instead of one long page — with PRO active the PRO section used to sit below eight Free releases.
* Changed: the top-bar search field no longer draws a bordered box inside its pill (the generic input styles were winning).
* Fixed: dropdowns closed as soon as you scrolled inside them, so options past the fold (for example the last plugin languages) could not be picked.
* Fixed: the pinned left menu could not always be scrolled to its last items — its height was fixed to the window, so whenever something sat above the plugin (a notice, an update nag, the old title) the bottom of the menu ended below the screen, and the mouse wheel over the menu did not move the page either. The menu is now sized to what is really visible below its top edge and scroll-chaining to the page is back.

= 1.2.1 =
* Added: the left menu now stays on screen while you scroll. It is pinned under the WordPress admin bar, scrolls on its own when it is taller than the window, and after opening a tab the menu is scrolled to that tab — no more scrolling back down to pick the next tool (requested on the public ideas board).
* Added: a Changelog tab (System group) that shows what changed in each release of SEO Fury Free and, when the add-on is active, PRO — the installed version is marked. The sidebar footer links to it and to your SEO Fury account.
* Added: a "My account" button in the top bar that opens dashboard.seo-fury.com (licenses, AI credits, support, ideas). Hidden together with the other branding when white-label mode is on.
* Fixed: in dark mode the result boxes on the License tab (activation / update check) kept their light-theme dark text, so the message was unreadable.

= 1.2.0 =
* Added: Author Box (E-E-A-T). Every user gets an author profile under Users → Profile — photo from the Media Library, job title, company (with URL), credentials / experience, areas of expertise, 12 social networks and extra profile URLs, plus a "never show a box for this user" switch.
* Added: the author box itself — auto-inserted under (or above) the content per post type, or placed anywhere with the `[seo_fury_author]` shortcode (`id`, `layout`, `show`, `heading`) or from PHP with `seo_fury_author_box()` / `seo_fury_get_author_box()`, so Elementor, Bricks, Mosaic, Divi and theme templates can all use it. New Author Box settings tab (elements to show, heading, position, post types) and a per-post "hide" switch in the SEO metabox → Advanced.
* Added: the profile feeds structured data automatically — the Person inside your Article schema gains @id, url, image, jobTitle, description, worksFor, sameAs, knowsAbout and hasCredential (values typed manually in the post's Schema tab are kept), and author archives get a ProfilePage + Person block.
* Changed: with PRO 1.5.0 the Author Box tab unlocks three more layouts (centered, compact, minimal), a fixed light/dark colour scheme and an accent colour; the post editor gets guest authors / another user and a "Reviewed by" expert (schema reviewedBy); a Gutenberg block and an Elementor widget render the box with a live preview.
* Changed: new hooks for developers — `seo_fury_author_data`, `seo_fury_author_box_layouts`, `seo_fury_author_box_html`, `seo_fury_author_box_enqueue`, `seo_fury_metabox_advanced_tab`.

= 1.1.20 =
* Changed: the SEO column in the post list no longer draws the editor score next to the PRO audit badge (two different numbers in one cell); with PRO active the editor score is listed inside the badge popup instead, with an explanation of how the two scores differ. New filter seo_fury_seo_column_handled.

= 1.1.19 =
* Fixed: with PRO active, the "Internal Linking" card on General Settings was just a description with nothing to click. It now links to the Link Assistant tab and explains where the editor suggestions live.
* Changed: in Webmasters, Google Search Console is now the first (and default) sub-tab; Site Verification moved second — verification is a one-time setup, the console is what you come back for.
* Fixed: dark mode never re-coloured two of the grey text tokens, so explanatory text that used them (for example the "How to read the results" notes in PRO Title Experiments) stayed dark on dark. Both tokens now follow the theme.

= 1.1.18 =
* Fixed: the five status tiles on SSL & Security (certificate, expiry, HTTPS redirect, mixed content, HSTS) kept their pastel backgrounds in dark mode while the text turned light, so they were unreadable. They now use the shared toned tiles that follow the theme.
* Fixed: the "Search settings…" box in the top bar was a placeholder left over from the interface redesign — you could not type into it. It is now a real search: it finds every tab, sub-tab and setting by name (also from the option key), opens the right screen, unfolds collapsed sections and scrolls to the field. Press / or Ctrl/Cmd+K to focus it.
* Fixed: in dark mode, chart axes and legends (Search Console, dashboard, Reports) kept Chart.js's light-theme grey and plain links kept the WordPress blue — both nearly invisible on the dark cards. Charts now follow the theme (and re-draw when you toggle it) and links use the accent colour.

= 1.1.17 =
* Added: a "Blocked IPs" sub-tab in 404 & Link Health. The block list used to sit below the 404 log where it was easy to miss; it now has its own tab with a live counter, an "Unblock" button per address, a field to block an address by hand, and the reason for each block (including scores from the PRO IP Reputation module).
* Added: "Block Expiry" setting (404 Monitor settings) — release blocked addresses automatically after 7, 30, 90 or 365 days. Home and mobile connections change IP every few days, so a permanent block eventually hits an innocent visitor; blocking an address again restarts the clock. Default stays "never" for existing sites.
= 1.1.16 =
* Changed: the IP lookup button (🌐) in the 404 log now opens the address on AbuseIPDB, so one click shows both who owns the network and whether the community has already reported that IP for abuse — handy before hitting "Block". The URL can still be swapped with the `seo_fury_404_ip_lookup_url` filter.
* Fixed: the Support tab ticket thread was unreadable in dark mode — messages were dark text on dark bubbles. Bubbles now set their own text colour and use borders that match the dark theme.

= 1.1.15 =
* Added: an IP lookup button (🌐) in the 404 log opens the address on an external who-is service in a new tab, so you can see which network — a cloud provider, a crawler, a hosting company — is hitting the site. The URL can be swapped with the `seo_fury_404_ip_lookup_url` filter.
* Fixed: the "Active" and "Resolved" tiles in 404 Statistics kept their light pink/green backgrounds in dark mode while the neighbouring tiles turned dark. All four now use the shared stat-tile design and follow the theme.
* Fixed: in dark mode, text that had no colour of its own (plain table cells, numbers in PRO module tiles) inherited the WordPress default and was almost invisible on the dark cards. The plugin now sets a legible base text colour for its dark theme.

= 1.1.14 =
* Added: the 404 log can be sorted — click any column header (URL, hits, first/last seen, IP, status) to order the table A–Z / Z–A or by the most hits; the server returns the top 100 entries for the chosen order.
* Added: a "Last IP" column in the 404 log, with the address of the most recent request to each missing URL, and an IP column in the CSV export.
* Added: block an IP address straight from the 404 log (🚫 button). Every front-end request from a blocked address is stopped before WordPress loads the page, with a status code of your choice — 403, 410, 429 or 400. A "Blocked IP Addresses" card lists the blocks with the number of requests stopped and an Unblock button. Logged-in administrators and your own address can never be blocked, and private ranges are refused.
* Added: the Service schema can carry an optional price and currency (output as an Offer), and the Video schema has an Embed URL field for YouTube/Vimeo players next to the direct file URL.
* Added: support for the PRO "Generate with AI" button in the Schema Generator — the AI fills the existing schema fields from the page content for review.
* Improved: the SEO Data Migration wizard now lists all four supported plugins (Yoast SEO, Rank Math, All in One SEO, SEOPress). Plugins with no data in your database are shown greyed out with a "Not found" tag, so you can see at a glance what can be imported.
* Fixed: with "Plugin Language" set to English, the PRO addon's menu items and section headers could still appear in the site language. The English override now covers the PRO text domain as well, so the whole admin follows the setting.
* Fixed: the "Save Changes" button on several settings screens used the WordPress core label, so it stayed in the site language even with the plugin set to English. All save buttons now use the plugin's own translatable label.
* Fixed: the Permalink field and the Google preview in the "Edit SEO Snippet" window kept showing the URL the page had when the snippet was first saved. A slug changed later (Quick Edit, or the placeholder "chernovik" slug rebuilt on publish) never made it into the window. Both now always show the page's current permalink.
* Fixed: a page created in the block editor could be published with the slug "chernovik" (or "auto-draft") instead of one built from its title. With URL transliteration on, the plugin used to give the still-untitled auto-draft a slug made from the "Draft" placeholder, and a title typed later in Latin never replaced it. Auto-drafts are no longer touched, and posts that still carry the placeholder slug get a proper one from their title on the next save — in any language.
* Changed: an empty slug on a draft is left empty, exactly as WordPress does, and built from the title at publish time (with transliteration) instead of being frozen at the first save.

= 1.1.13 =
* Fixed: the "Search performance over time" chart on the dashboard showed only clicks, with impressions missing, on sites where the chart library could not be downloaded from its CDN. Chart.js now ships with the plugin, so the chart always renders — and the simplified fallback draws both series as well.
* Fixed: "Load URLs from sitemap" in IndexNow did nothing — the button and the server were using different names for the same request.
* Fixed: the AI content toolbar in the post editor was loaded from a path that does not exist, so its Generate / Expand / Rewrite buttons never appeared for PRO users.
* Security: support ticket requests now also require administrator rights, not only a valid security token.
* Changed: every dropdown in the plugin is now drawn by SEO Fury itself instead of the operating system, so the open list matches the rest of the interface in both light and dark mode. Keyboard control (arrows, Enter, Esc) and screen-reader support are unchanged.
* Changed: one shape for every control — sub-tabs are a flat underline bar instead of the old folder tabs, and buttons, text fields and dropdowns now share the same height, corner radius and focus ring.
* Changed: collapsible panels no longer show the browser's default triangle next to their own icon; each panel has a single chevron that turns when it opens.
* Changed: opening hours in Local SEO are compact and much faster to fill in — enter a time once and apply it with "Mon-Fri", "Mon-Sat" or "Every day" (the remaining days are marked as days off automatically), mark any day off with a checkbox, and type times in shorthand ("9" becomes 09:00, "930" becomes 09:30).
* Fixed: icons inside coloured buttons could be invisible, because the icon kept an accent colour on a same-coloured button.

= 1.1.12 =
* Added: SEO Fury panels on the WordPress dashboard (Dashboard → Home) — "SEO overview" (average SEO score, active redirects, unresolved 404s, images without alt, pages without a description, plus a site health checklist) and "Needs attention" (the concrete items worth fixing, with the latest 404 errors). Both can be switched off in General Settings or hidden individually via Screen Options.
* Changed: the Search Console dashboard panel now shows the change against the previous 28-day period and matches the new panel styling.
* Changed: redesigned the SEO data migration wizard — clearer three-step flow, live counters for imported / skipped / failed posts, elapsed time and an estimate of the time left, a "stop after this batch" button, a next-steps checklist, dark mode support and full keyboard access. The activity log now groups repeated batch results into one updating row instead of printing a line per batch.
* Added: a short "why are you deactivating?" form on the Plugins screen, with a few reasons and an optional comment. Answering is optional — Skip, Esc or closing the dialog deactivates immediately and sends nothing, and the dialog states exactly what is sent.
* Fixed: most of the admin interface stayed in English on translated sites. WordPress prefers the community translation from translate.wordpress.org over the one bundled with the plugin, and that community file covers only part of the plugin — for Russian it defines about half the strings, none of them on the dashboard. Both files are now loaded, so the community translation still wins for every string it covers and the bundled catalogue fills the rest.
* Fixed: five strings in the post editor (duplicate title/description warnings, schema field loading, broken links, secondary keywords) were never translatable and always appeared in English.
* Fixed: completed the translations — roughly 800 strings that had been added to the plugin over time were missing from the catalogues. German, Spanish, French, Italian, Portuguese (BR) and Russian are complete again.

= 1.1.11 =
* Fixed: canonical URL could be frozen as the ?p=ID address. The Canonical field was pre-filled with the permalink, which for an unpublished post is the ?p=ID form; saving the metabox stored it, and the published page kept it as its canonical. The field now shows the permalink only as a placeholder, an entered value equal to the post's own address is no longer stored, and pages that already carry a stored ?p=ID canonical output the real permalink again.
* Changed: the automatic canonical tag is output for published posts only; a custom canonical is always output.

= 1.1.10 =
* Fixed: SEO analysis, readability and extra SEO checks in the post editor now work on pages built with page builders (Mosaic, Elementor, Divi, Brizy, Beaver Builder and others). When the WordPress editor is empty, the checks read the text from the rendered page instead of reporting the content as too short.

= 1.1.9 =
* Fixed: meta tags on archive pages (blog home, categories, tags, custom taxonomies, author, search, date, 404) were silently stripped before output — robots, description and Open Graph tags on those pages are now emitted again.
* Fixed: per-taxonomy and per-post-type "Custom Robots Meta" (noindex, nofollow, etc.) now reaches the page.
* Fixed: per-post-type robots settings were ignored for any post that had been saved with the SEO metabox open; per-page overrides now apply only when a value is actually set.

= 1.1.8 =
* Added: a small, fully dismissible review request on plugin screens after two weeks of use.
* Changed: new plugin listing title and description, GEO section in the readme, tested up to WordPress 7.1.

= 1.1.7 =
* Added: two new dashboard widgets — Top pages (Search Console) and Latest 404 errors.
* Added: the dashboard now previews the extra widgets available in SEO Fury PRO.
* Changed: readability and cannibalization feature keys registered for the PRO addon.

= 1.1.6 =
* Fixed: the Position column of the Dashboard top queries table could overflow the card in some interface languages.
* Fixed: a manually edited draft slug was reverted and rebuilt from the post title when URL transliteration was enabled.
* Fixed: several labels in the schema editor did not follow the selected interface language.
* Fixed: selecting English as the plugin language could still show a translated interface.

= 1.1.5 =
* Added: the Dashboard is now yours to arrange. "Customize dashboard" lets you drag the tiles and cards into the order you want and hide the ones you never read; the layout is saved per user account.
* Added: a Search Console graph on the Dashboard — clicks and impressions over the last 28 days, the same chart as the Webmasters screen, without leaving the overview.
* Added: two more Dashboard widgets you can switch on — your top search queries of the last 28 days, and the results of your latest PageSpeed checks. Plus a tile counting pages that score below 50.
* Improved: with Search Console connected, the Webmasters screen no longer spends a whole card on the Disconnect button. Status and Disconnect now sit in the one-line bar next to the property and date range, leaving the space to your actual data.
* Improved: German, Spanish, French, Italian, Portuguese and Russian translations cover the new screens.
* Fixed: around 300 German, Spanish, French, Italian and Portuguese translations never actually appeared — any phrase containing a quotation mark was stored in a form the plugin could not match, so those strings fell back to English. They now show translated.
* Fixed: four Search Console messages carried translations copied from unrelated strings in German, Spanish, French and Russian — for example a proxy error that read "Failed to restore revision". They are translated properly now.

= 1.1.4 =
* Added: attach screenshots to a support ticket, when you open it and in any reply. Up to 3 images, 5 MB each.
* Fixed: the overall SEO score gauge stretched into an oval on a score of 100 and its number sat above centre. The value and the "/100" label are now stacked, so the gauge stays a circle at every score.
* Improved: PageSpeed failures are now explained in plain language instead of showing Google's raw error. A page that never paints, an unreachable URL, a key with an HTTP-referrer restriction, or an API that was never enabled each get a message saying what to change.
* Fixed documentation: the Google Indexing API was listed among the free features, but it ships in the PRO addon only — the free plugin shows an upgrade notice on that tab. Site Verification was listed as covering Baidu and Pinterest; it has fields for Google, Bing and Yandex plus a custom meta tag for anything else.

= 1.1.3 =
* Fixed: the overall SEO score was clipped inside its circle when the value reached three digits.
* Fixed: Search Console tiles in the editor sidebar were cut off at narrow widths — they now wrap to a 2x2 grid.

= 1.1.2 =
* Fixed: breadcrumbs skipped the blog index page. When your posts live on a separate page, that page is now the last item in the trail (omitted when the blog is your front page, since Home already covers it).
* Changed: the sortable SEO column on the Posts and Pages lists moved into its own module.

= 1.1.1 =

**Changed:**

* **404 Monitor & Redirects — compact action buttons.** The per-row actions (Find, Redirect, Resolve, Edit, Toggle, Delete) are now icon-only buttons with hover tooltips, so long URLs have more room and the tables no longer wrap awkwardly.

**Fixed:**

* **Dark mode polish.** Fixed a range of screens that didn't fully adapt to dark mode — light cards/boxes that stayed white (Sitemap, Robots.txt, Page Speed, Search Console, and others) and faint hint text (`.description`) that blended into the dark background. Light mode is unchanged.
* **Action button icons** are now properly centered.

= 1.1.0 =

**Added:**

* **Redesigned admin (2026) with dark mode** — a refreshed "command center" interface: a new **Dashboard** landing screen with at-a-glance KPIs (average SEO score, active redirects, unresolved 404s, images without alt) plus Search Console performance and a site-health checklist, a modern grouped sidebar, and a **light / dark / auto** theme toggle that follows your system preference.
* **Overall SEO Score** — the three editor analysis panels (on-page SEO, readability, extra checks) are now combined into a single 0–100 score shown at the top of the SEO box, and surfaced as a sortable **"SEO" column** on the Posts and Pages list so you can see at a glance which content needs attention.
* **Bulk Alt Text** — a one-click tool (SEO Images tab) that scans your Media Library for images missing alt text and writes real, permanent alt text to each attachment using your template, in batches.
* **Redirect Tester** — enter any URL in the Redirects screen to see which rule (exact or regex) would fire and the exact target, without performing the redirect or counting a hit.
* **Submit sitemap to IndexNow** — one button submits every published URL from your sitemap post types to IndexNow in batches.
* **SEO plugin conflict detector** — a dismissible warning when another SEO plugin (Yoast, Rank Math, AIOSEO, SEOPress, The SEO Framework) is active alongside SEO Fury, which would cause duplicate meta tags.
* **Duplicate meta detector** — the editor warns when another post already uses the same custom SEO title or meta description (templates are ignored), linking to the conflicting posts.
* **robots.txt preview & linter** — preview the fully-composed robots.txt and get warnings for common mistakes (Disallow: / blocking the whole site, duplicate User-agent blocks, directives before any User-agent, missing Sitemap).
* **Search Console: period comparison, CSV export & per-post stats** — compare the current period with the previous one (with up/down deltas), export the Top Queries / Top Pages tables to CSV, and see clicks/impressions/CTR/position for the post you're editing right in the SEO box.
* **Six more schema types with full forms** — Person, Organization, Course, Book, SoftwareApplication, and LocalBusiness now have proper generator fields and valid JSON-LD output (previously placeholders).

**Security:**

* Fixed stored XSS in the Redirects, 404 Monitor, and IndexNow admin tables. Visitor- and user-controlled values (redirect source/target URLs, 404 paths from request headers, submitted IndexNow URLs) are now HTML-escaped before being rendered in the dashboard.
* Hardened JSON-LD schema output with `JSON_HEX_TAG` / `JSON_HEX_AMP` so a custom schema value can no longer break out of the `<script type="application/ld+json">` block.
* 404 Monitor now reads the client IP from `REMOTE_ADDR` by default and only trusts forwarded headers (`X-Forwarded-For`, `CF-Connecting-IP`) when the new "Behind a Proxy / CDN" option is enabled — prevents IP spoofing and log poisoning.
* CSV exports (Redirects and 404 Monitor) now neutralize spreadsheet formula injection (cells starting with `=`, `+`, `-`, `@`).
* The .htaccess editor now rejects directives that could enable PHP execution or proxy requests to an external server (`AddHandler`/`SetHandler ...php`, `php_flag engine`, `Action`, `RewriteRule [P]`), showing exactly which line was blocked instead of silently stripping it.
* Stored credentials (Google Search Console tokens) now use authenticated encryption (AES-256-CBC + HMAC, versioned). Decryption fails cleanly when the WordPress salt is rotated instead of emitting ciphertext as a credential — Google Search Console simply prompts to reconnect.
* Settings import now sanitizes every value before saving, so an import file cannot inject markup into an option that is later rendered.
* PageSpeed results received from the browser are now sanitized before storage, and audit titles from the API are escaped before display.
* Redirects: a regex rule whose target host is built from a back-reference (e.g. `https://$1`) is now confined to your site, closing an open-redirect vector. Static cross-domain redirects still work as intended.
* robots.txt Crawl-delay values are now validated as numeric, preventing extra directives from being injected via the field.

**Fixed:**

* Migration Wizard now correctly imports redirects from Yoast Premium, Rank Math, All in One SEO, and SEOPress. They were previously written to a non-existent table and silently lost.
* Front-end SEO title, meta description, Open Graph, and Twitter tags now resolve the full set of template variables (category, author, focus keyword, post type, WooCommerce fields, advanced date patterns, and more) instead of emitting literal `%variable%` text.
* Fixed mismatched variable names in the post editor insert menu (e.g. `%seotitle%` → `%seo_title%`, `%wcshortdesc%` → `%wc_shortdesc%`) so inserted variables resolve correctly. Templates saved with the old names remain compatible via automatic aliasing.
* Custom JSON-LD now resolves variables after the JSON is parsed, so values containing quotes no longer corrupt the markup and drop the schema.
* Rank Math posts that carried only robots directives (no title or description) are now included in migration.
* The .htaccess editor no longer falsely rolls back valid changes on hosts that block loopback self-requests; it saves the change and warns that the automatic safety check could not run.
* XML sitemaps now paginate beyond 1,000 URLs (`sitemap-{type}-2.xml`, etc.), so large sites no longer drop URLs from the sitemap. Existing single-file URLs are preserved as page 1.
* Removed the dead Google sitemap "ping" (the endpoint was retired in 2023 and only 404'd), saving an outbound request on every content save.
* Video sitemap now escapes a literal `]]>` inside titles/descriptions so it can't break the XML.
* Schema markup: fixed invalid `@type` casing for LocalBusiness, SoftwareApplication and other multi-word types; Recipe now includes the required image; Event uses your store currency instead of a hardcoded USD; WooCommerce back-ordered products map to `BackOrder`; JobPosting location is now a proper `PostalAddress`; the `%org_name%` variable reads the correct Local SEO option; the Organization node now has an `@id` so publisher/seller references resolve; and duplicate BreadcrumbList / Organization / WebSite nodes are de-duplicated.
* IndexNow key verification now works on subdirectory installs, and the previous key file is removed when you regenerate the key.
* IndexNow auto-submit is now debounced per URL, so a bulk edit or import no longer fires repeated blocking submissions for the same page.
* 404 Monitor caches its table-existence check, avoiding a database query on every 404 during bot/scanner traffic.
* 404 Monitor no longer logs non-page 404s emitted by REST, AJAX, cron, or feed sub-requests.
* Image SEO no longer adds a second `alt` attribute to images that already use a single-quoted `alt` (which produced invalid HTML).
* LLMs.txt now escapes special characters in titles and links, so a title containing `]` or `)` can no longer break or hijack the generated Markdown.
* Taxonomy sitemaps now paginate beyond 1,000 terms, matching post-type sitemaps.
* Google Search Console no longer dead-ends with a blank "Invalid OAuth state" screen when the connection session expires — it returns a friendly "please connect again" message, and the state token is now a stronger per-user random value.
* Schema: Recipe instructions given as multiple lines are emitted as structured `HowToStep` items; the breadcrumb generator omits `item` on the current page per Google's guidance; and YASR star ratings no longer overwrite an `aggregateRating` already set by the schema generator.
* The canonical tag now also suppresses canonicals from Rank Math and SEOPress (in addition to Yoast and AIOSEO), preventing duplicate canonical tags when another SEO plugin is active.
* WordPress's built-in sitemap is now reliably disabled when SEO Fury's sitemap is enabled (the previous hook ran too late).
* 404 notification emails now build correct links on subdirectory installs instead of doubling the path.
* PageSpeed history now keeps the most recently checked results instead of pruning by insertion order.
* The Search Console dashboard widget no longer makes a blocking API request when disconnected, and backs off for a few minutes after a failure instead of retrying on every dashboard load.
* `%randomword%` now distributes evenly on 32-bit PHP.

**Improved:**

* The live SERP preview in the editor now resolves more variables (author, modified date, current date/year, SEO title/description), and uses the post's publish date for `%date%`/`%year%` so the preview matches the actual front-end output.
* Keyword density now counts whole words only (so "art" no longer matches "start").
* Russian passive-voice detection no longer flags ordinary reflexive verbs, removing a large source of false warnings.
* Transition-word detection now matches whole words only, so words like "then" inside "strengthen" no longer count.
* Readability and FAQ-import interface strings are now fully translatable (English source text).
* Added a composite database index for faster redirect matching on sites with many redirects.

= 1.0.3 =

**Improved (admin UX — contextual help):**

* Bulk URL Conversion (General settings) now lists every non-Latin URL detected, with Open / Edit buttons per row — you can see and act on the URLs that need transliteration, not just the count.
* Meta Titles → "Available variables" chips now show a tooltip on hover explaining what each variable outputs and where the value is sourced from. Descriptions for `%sitename%`, `%sitedesc%`, `%sep%`, `%title%`, `%excerpt%` clarified to mention the exact WP setting/field they pull from.
* Robots.txt → Crawl-delay block: added an info panel explaining what Crawl-delay does, which bots respect it (Bing/Yandex/Baidu/DuckDuckBot) vs. which ignore it (Googlebot), and when the field should be left empty.
* XML Sitemap → Priority / Changefreq: added an info panel describing what these values mean, typical ranges, and the reality check that Google ignores both. Tooltips added to every Priority / Changefreq label across post-type, taxonomy, and Additional URLs sections.
* 404 Monitor: tooltips added to the "Total Hits" stat card and the "Hits" table column, clarifying that a hit is one HTTP request (visitor, direct entry, bot or crawler) — not a mouse click. Same tooltip added to the Redirects "Hits" column.

**Changed:**

* PRO upsell admin notice ("Unlock 20+ Advanced SEO Features") is now hidden when a PRO license is active — no more dangling upsell banner for paying users.
* "Changelog" tab removed from the settings menu (in both Free and PRO). Updates will be communicated through the WordPress updater and release notes.

**Fixed:**

* Bulk URL Conversion stats: regex used to detect non-Latin slugs contained a typo (`Џ` instead of `Ї`), which could mis-classify Ukrainian URLs as Latin. Now matches the same character set used at save time.

= 1.0.2 =

**Security:**

* Hardened redirect target sanitization — redirect rules now pass through `esc_url_raw()` to strip dangerous URL schemes (javascript:, data:, vbscript:) before `wp_redirect()` fires. Applies to both exact-match and regex-based redirects.

= 1.0.1 =

**Added:**

* Google Search Console moved to Free — connect GSC without PRO license
* Basic Image SEO — automatic alt text generation from post title and filename templates
* Flesch Reading Ease score — readability metric for English and Russian content
* Passive voice detection — warns when too many passive sentences
* Transition words check — ensures content uses connecting phrases
* Keyword synonym and morphological matching — detects plural, singular, and word form variations
* Schema Builder fully internationalized — all UI strings now translatable

**Improved:**

* Redirects and 404 monitoring now unlimited in Free plan
* Google Indexing API confirmed as Free feature
* 50+ new Russian translations for support tickets, hreflang, schema builder, and PRO upsells
* Elementor integration uses modern $e.hooks API instead of deprecated elementor.saver.on
* 404/Link Scanner tabs restyled with WordPress nav-tab-wrapper for consistency
* Support ticket module fully internationalized

**Fixed:**

* Fatal error in Elementor editor — null check added for AI Image Generator module
* 404 errors from missing AI scripts in free version — added file_exists() checks
* POST data sanitization in schema AJAX handlers
* Capability check ordering in AJAX handlers
* PHP warnings from undefined array keys
* Removed debug console.log statements from production JS
* PRO addon text domain corrected (seo-fury-pro)

= 1.0.0 =
* Initial release on WordPress.org.
* Separated free and PRO functionality into standalone plugins.
* All core SEO features available for free without license requirements.

== Upgrade Notice ==

= 1.7.2 =
Fixes from user feedback: no sideways scrollbar in the post sidebar with German titles, long URLs wrap in the Blocked IPs list and the 404 log.

= 1.7.1 =
Fixes from user feedback: tables next to the Folders plugin, the editor sidebar scrollbar, Settings tabs last, "Add widget" in the page header.

= 1.7.0 =
New Content Tools: table of contents, reading time and Duplicate for posts and pages. Replaces LuckyWP Table of Contents, Reading Time WP and Duplicate Page; their shortcodes keep working.

= 1.6.0 =
New design for every screen, a post view counter (Post Views), SEO fields for categories and tags, and security and performance fixes from a full audit.

= 1.5.5 =
Support tab shows the tickets and ideas of this site by default, with a switch to see all your sites; collapsible blocks on every plugin screen; Page Speed dark-mode fixes.

= 1.5.4 =
robots.txt picks up the AI crawlers blocked in SEO Fury PRO's AI Crawler Monitor; corrected competitor comparison.

= 1.5.3 =
Social images for Meta Titles sections and a site-wide default, icon row actions, a steady Meta Titles menu and dark-theme contrast fixes.

= 1.5.2 =
Bulk actions and pages in the 404 log, save a page's Schema as a template, default Schema template per post type (with check, preview and undo), one consistent style for all dialogs.

= 1.5.1 =
Tidier Reviews forms (labels above fields, no overflowing columns) and a dark calendar in the dark theme.

= 1.4.0 =
Ideas and support tickets in one place on the Support tab, update check in the sidebar, fix for half-English PRO screens with a plugin language set, compact one-line tab header.

= 1.3.1 =
New "Clear cache" button in the top bar (WP Rocket, LiteSpeed, W3TC, WP Super Cache, Cloudflare, Kinsta, WP Engine and more) + optional auto-clear after saving settings.

= 1.3.0 =
REST endpoints for the free SEO Fury Writer add-ons (Google Docs, Word, LibreOffice); Author Box / Privacy & Consent tabs back under "General" with PRO active; search finds tabs by English aliases.

= 1.2.3 =
New Privacy & Consent tab: customisable cookie banner with consent categories and script blocking, generated privacy policy + consent documents (152-ФЗ / GDPR-style), consent checkbox in forms, consent log. Preferences menu now has real sections you can rename, reorder and create.

= 1.2.2 =
Dashboard becomes a drag-and-drop board with resizable widgets and per-widget settings; new Preferences tab to hide / reorder menu items and collapse the sidebar; the plugin screen fills the area under the admin bar; the pinned left menu can always be scrolled to its last items.

= 1.2.0 =
New Author Box for E-E-A-T: author profiles with photo, credentials, expertise and social links, shown as a box (auto, shortcode or PHP) and merged into your Person / ProfilePage schema.

= 1.1.20 =
With PRO active, the post-list SEO column shows one badge instead of two competing scores; the editor score moves into the popup.

= 1.1.19 =
Google Search Console is now the first Webmasters sub-tab, and the "Internal Linking" card in General Settings opens the PRO Link Assistant instead of showing a dead description.

= 1.1.18 =
The "Search settings…" box now works — find any setting by name (press / or Ctrl+K). Also fixes dark mode on SSL & Security and in charts.

= 1.1.17 =
New "Blocked IPs" tab with one-click unblock, manual blocking and an optional block expiry for dynamic IPs.

= 1.1.16 =
The 404 log IP button now opens AbuseIPDB (owner + abuse score), and the Support tab is readable in dark mode again.
= 1.1.13 =
Interface pass: dropdowns, tabs, buttons and fields now share one design, and opening hours in Local SEO can be filled for the whole week in one click.

= 1.1.12 =
Fixes the admin interface staying in English on translated sites, adds SEO panels to the WordPress dashboard and a deactivation feedback form, and redesigns the migration wizard.

= 1.1.11 =
Fixes canonical URLs stuck as ?p=ID on posts whose SEO metabox was saved before publishing. Recommended for all users — existing pages are corrected automatically.

= 1.1.10 =
SEO analysis and readability checks now work on pages built with page builders (Mosaic, Elementor, Divi, Brizy and others) — the editor panel reads the rendered page when the WordPress editor is empty.

= 1.1.9 =
Important fix: robots, description and Open Graph meta tags on archive pages (categories, tags, blog home, search, etc.) were not being output, and per-taxonomy / per-post-type Custom Robots Meta had no effect. Recommended for all users.

= 1.1.5 =
The Dashboard is now customisable — reorder or hide widgets, and add a Search Console graph, top queries and PageSpeed results to it.

= 1.1.0 =
Important security and reliability update. Fixes stored XSS in the Redirects/404/IndexNow tables, hardens schema and .htaccess editing, blocks 404 IP spoofing and CSV formula injection, and fixes redirect loss during migration plus full template-variable resolution in front-end meta tags. Recommended for all users.

= 1.0.3 =
Admin UX improvements: clearer contextual help on Bulk URL Conversion, Meta Titles variables, robots.txt Crawl-delay, Sitemap Priority/Changefreq, and 404 Monitor. Plus a small bug fix in URL classification regex.

= 1.0.2 =
Security hardening: redirect targets now sanitized to block dangerous URL schemes. Recommended upgrade.

= 1.0.1 =
Google Search Console and Google Indexing API now free. Unlimited redirects and 404 monitoring. Flesch readability score, passive voice detection, keyword variation matching. Multiple bug fixes.

= 1.0.0 =
First WordPress.org release. All core SEO features included for free.

== External Services ==

This plugin connects to external services only when you use a feature that needs them. Nothing is sent in the background, and there is no telemetry.
The charting library (Chart.js 4.4.7, MIT) ships inside the plugin, so admin screens load no third-party scripts.

= IndexNow API =

Tells search engines that support IndexNow (Bing, Yandex, Seznam, Naver and others) about new or changed pages.

* Service URL: https://api.indexnow.org/indexnow
* What is sent: the page URLs and your IndexNow key
* When: when you submit URLs manually, or on publish/update if you switch on automatic submission (off by default)
* [IndexNow Terms of Use](https://www.indexnow.org/terms)
* [IndexNow Privacy Policy](https://www.indexnow.org/privacy)

= Google PageSpeed Insights API =

* Service URL: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
* What is sent: the URL of the page being analysed
* When: only when you click "Analyze" on the Page Speed tab or in the post editor
* [Google API Terms of Service](https://developers.google.com/terms)
* [Google Privacy Policy](https://policies.google.com/privacy)

= Google Search Console API and Google OAuth =

Shows clicks, impressions, CTR and positions from your own Search Console property.

* Service URLs: https://oauth2.googleapis.com/token (sign-in tokens) and https://www.googleapis.com/webmasters/v3 (search data)
* What is sent: OAuth tokens, your property URL and the date range / page being queried
* When: when you connect Search Console, open the Search Console tab or dashboard widgets, or view a post's Search Console numbers in the editor
* [Google API Terms of Service](https://developers.google.com/terms)
* [Google Privacy Policy](https://policies.google.com/privacy)

= SEO Fury Google sign-in proxy =

Lets you connect Search Console with one click without creating your own Google Cloud project.

* Service URL: https://seo-fury.com/oauth/ (connect.php, token.php, refresh.php)
* What is sent: your site URL (to return you to the right admin page), the one-time authorisation code from Google, and — about once an hour while connected — the Google refresh token, so the proxy can issue a new access token (nothing is stored on SEO Fury servers)
* When: when you connect with the one-click option and while that connection is active (with your own Google Cloud credentials the proxy is not used)
* [SEO Fury Terms of Service](https://seo-fury.com/terms-of-service.html)
* [SEO Fury Privacy Policy](https://seo-fury.com/privacy-policy.html)

= SEO Fury changelog =

* Service URL: https://seo-fury.com/api/changelog.json
* What is sent: a standard request; the WordPress version is part of the user agent
* When: only when you open the Changelog tab (cached for 6 hours)
* [SEO Fury Privacy Policy](https://seo-fury.com/privacy-policy.html)

= SEO Fury support (tickets and ideas) =

* Service URL: https://api.seo-fury.com/api/v1 (fallback https://api-ru.seo-fury.com/api/v1)
* What is sent: your ticket or idea text, attachments you add, the site address, and with tickets the system information shown on the form (WordPress, PHP and MySQL versions, theme, active plugins)
* When: only when you use the Support tab
* [SEO Fury Terms of Service](https://seo-fury.com/terms-of-service.html)
* [SEO Fury Privacy Policy](https://seo-fury.com/privacy-policy.html)

= SEO Fury deactivation feedback =

* Service URL: https://api.seo-fury.com/api/v1/plugin/feedback (fallback https://api-ru.seo-fury.com)
* What is sent: the reason you pick, your optional comment and e-mail, the site URL and plugin/WordPress versions
* When: only if you click "Send" in the optional dialog shown when you deactivate the plugin ("Skip" sends nothing)
* [SEO Fury Privacy Policy](https://seo-fury.com/privacy-policy.html)

= SEO Fury PRO (separate add-on) =

The PRO add-on, when installed, connects to SEO Fury servers for licence validation, updates and AI features, and to the third-party services you configure in it. These connections are made by the add-on, not by this plugin, and are described in the add-on's documentation.
