Changelog

Fresh releases. No reheated Schnitzel.

1.3.5 — Footer & Translations Latest5 Mar 2026

Changed
Fix
  • German translations for AI Features dashboard — section heading, intro text, feature labels and descriptions, and the submit button were displayed in English on German WordPress installations.

1.3.4 — GEO Block Themes 4 Mar 2026

New
  • Four built-in GEO block themes — Light (default card), Dark (for dark-mode sites), Minimal (left border stripe only, no box), and Bavarian (Bavarian-blue header with CSS diamond / Rauten pattern). Select via the new Theme dropdown in GEO Block settings.
Changed
  • Styling controls simplified — Color Scheme (auto/light/dark) and Load Minimal CSS checkbox replaced by the single Theme selector. CSS is always loaded when the block is enabled.
Removed
  • Custom CSS field — removed per WordPress.org plugin guidelines. Use your theme's stylesheet or Customizer to override .bre-geo custom properties. See the how-to page for available CSS classes and theme overrides.

1.3.3 — CSS Security Hardening 3 Mar 2026

Security
  • GEO Block custom CSS — input is now sanitised through a dedicated parser that strips comments, blocks at-rules (@import, @media, etc.), and rejects expression(), javascript:, and url() to prevent CSS injection.
  • Inline style escaping — the GEO Block previously used esc_attr() on raw CSS content, which corrupts quotes and ampersands in valid declarations. Replaced with the new CSS-safe sanitiser.
Fix
  • Schema.org JSON-LD — output no longer passes JSON_UNESCAPED_SLASHES to wp_json_encode(), which could allow </script> injection inside the JSON-LD block.
  • Uniform prefix — all JS localised objects, test bootstrap constants, and a KeyVault doc comment now consistently use the brezngeo_ / brezngeo prefix.

1.3.2 — Schema Fix & WP.org Compliance 2 Mar 2026

Fix
  • Schema.org meta description — structured data (Article, BlogPosting, VideoObject) now correctly reads the AI-generated meta description. A renamed post meta key caused a silent fallback to the post excerpt for all posts since v1.3.1.
  • Dashboard stats transient — corrected a typo in the usage-stats transient key. Visible effect: the stats counter in the dashboard status widget resets once after updating.
Internal
  • WordPress.org compliance — all plugin identifiers (option keys, AJAX actions, post meta, transients, JS globals) renamed from bre_ to brezngeo_ prefix.

1.3.1 — Smarter Link Matching & AI Feature Toggles 1 Mar 2026

Improved
  • Topic-based anchor matching — Link Suggestions now find anchor phrases using the target post's title, tags, categories and excerpt. A Danube article can now suggest a link to a Deggendorf article via the shared "donau" tag, even if "Deggendorf" never appears in the text.
  • Excerpt scoring — candidate posts now include excerpt tokens in relevance scoring (weight ×1.5), bridging the gap between sparse titles and full content.
New
  • AI Features card on Dashboard — when an AI provider is connected, a new card lets you opt individual features into AI: Meta Descriptions, Internal Link Suggestions, GEO Block. All off by default.
Fix
  • Link Suggestions post search — Exclude / Boost search was completely broken: wrong REST API URL and the search script was never loaded on the settings page.
  • Plugin Check — translators comment position in bulk.php; NonPrefixedVariable warnings in link-suggest-settings.php and txt.php.

1.3.0 — Internal Link Suggestions 1 Mar 2026

New
  • Internal Link Suggestions — new editor meta box suggests relevant internal links while you write: "phrase in article" → target post. Multi-select, preview before apply, no automatic insertion.
  • Text-based matching — works without an AI key. Scores candidates by title, tag, and category overlap. Optional AI upgrade sends top candidates to your connected provider for semantic refinement.
  • Configurable trigger — manual button (default), on post save, or every N minutes. Zero background load in manual mode.
  • Exclude & Boost — new settings page (Link Suggestions) to exclude posts from suggestions (e.g. Imprint, Contact) and boost/prioritise specific posts.
  • Gutenberg + Classic Editor — reads and inserts content via official editor APIs in both environments.
  • Full localization — all strings translated into German (de_DE) and English (en_US).

1.2.4 — UX Polish & i18n Fixes 28 Feb 2026

Fix
  • AI generation defaults to OFF — new installs no longer show AI as active until the user explicitly enables it and enters an API key
  • Active Provider on the Dashboard now correctly shows "AI disabled" or "Not configured" when no API key is set — no more misleading "OpenAI" label
  • German strings removed from the Schema.org admin page, Schema Metabox in the Post Editor, and the SEO Widget sidebar
New
  • AI-inactive notice on Meta Generator and GEO Block pages — clearly explains that fallback mode is active and links to the AI Provider settings
  • Locale-aware default prompt — German WordPress installs get the German meta prompt, all others get English
  • "Theme outputs post title as H1" setting in Meta Generator — suppresses false "no H1" warning for themes that render the post title as an H1 outside of the content area
  • SEO Widget warning strings are now fully translatable via WordPress i18n

1.2.3 — TXT Files Admin Page 28 Feb 2026

Improved
  • TXT Files — llms.txt and robots.txt settings merged into a single admin page with native WordPress tab navigation; status dot on the llms.txt tab, blocked-bot count badge on the robots.txt tab

1.2.2 — Dashboard UX & AI Controls 25 Feb 2026

New
  • Dismissible welcome notice — shows for 24 hours after first activation, dismissed per user, with a small Bavarian touch
  • AI enable toggle on the AI Provider page — disable AI generation without deleting your API key; includes a cost warning for first-time setup
  • Token usage and estimated cost in the Status widget — tracks generated descriptions and consumed tokens across all bulk and single runs
Improved
  • Dashboard meta coverage now shows progress bars (green / yellow / red) instead of a plain table
  • Quick links panel with hover animation replacing the previous unstyled list
  • AI crawler entries now show a green dot indicator in the crawler table
  • 5-minute transient caching for all dashboard database queries (meta stats, crawler summary)
Fix
  • Plugin Check / PHPCS: variable assignments moved from dashboard template into the controller — no more NonPrefixedVariableFound warnings
  • Hardcoded German strings in admin.js replaced with properly localized equivalents via wp_localize_script

1.2.1 — Schema Admin Page 24 Feb 2026

Admin UI
  • New BreznGEO → Schema.org admin page — schema settings are now a dedicated top-level menu item instead of being buried under Meta Generator
  • Schema settings stored in a separate option key (bre_schema_settings); existing installations fall back to previous settings automatically

1.2.0 — Schema Suite v2 24 Feb 2026

Schema.org
  • FAQPage JSON-LD — auto-generated from GEO Quick Overview FAQ pairs; no extra input needed
  • BlogPosting / Article JSON-LD with embedded author (Person) and featured image (ImageObject)
  • ImageObject JSON-LD from featured image — includes contentUrl, width, and height
  • VideoObject JSON-LD — auto-detects the first YouTube or Vimeo embed in post content and outputs embed URL, thumbnail, and upload date
Post Editor Meta Box
  • New BreznGEO Schema meta box in the post and page editor — schema type selector with per-type field groups
  • HowTo — title + step list (one step per line), outputs HowTo with HowToStep entries
  • Review — product / service name and star rating (1–5), outputs Review with Rating
  • Recipe — name, prep time, cook time, servings, ingredients, and instructions; outputs full Recipe schema with ISO 8601 durations
  • Event — name, start date, end date (optional), location or URL; online/offline toggle outputs Place or VirtualLocation
  • Meta box only appears when at least one metabox-type schema is enabled in settings

1.1.1 — Encoding & Styling Fixes 22 Feb 2026

Bug Fixes
  • Fixed: umlauts and special characters (ä, ö, ü, narrow spaces) displayed as raw escape sequences (e.g. u00e4) in the GEO Quick Overview block on the frontend
  • Fixed: dark / light color scheme setting had no visible effect on the frontend block due to browser CSS cache from v1.1.0
  • GEO block JSON storage now uses JSON_UNESCAPED_UNICODE — actual UTF-8 bytes are stored instead of \uXXXX escape sequences, eliminating any encoding ambiguity in the round-trip through the database

1.1.0 — GEO Quick Overview 22 Feb 2026

GEO Block
  • GEO Quick Overview — AI-generated per-post summary block with short summary, key bullet points, and optional FAQ
  • Rendered as a native <details> element: collapsible (default), always open, or store-only (no frontend output)
  • Configurable insertion position: after first paragraph (default), top, or bottom of content
  • Auto-generation on publish via transition_post_status hook; optional re-generation on every update
  • Three modes: auto on publish, hybrid (auto only when fields are empty), or manual only
  • Quality gate: word-count threshold suppresses FAQ on short posts (default: 350 words)
  • JSON response parsing with markdown-fence stripping and hard bounds on summary length and bullet/FAQ count
  • Fluff-phrase detection prevents filler language in AI output
Editor Integration
  • Post editor meta box with live generate and clear buttons, per-post enable/disable toggle, and lock checkbox
  • Auto-lock: manual edits to summary, bullets, or FAQ automatically engage the lock to prevent AI overwrite
  • Optional per-post prompt add-on field for author-level customization
  • AJAX generation fills fields instantly without a page reload; last-generated timestamp shown in the meta box
Settings & Styling
  • Dedicated admin page under BreznGEO → GEO Block with full settings form
  • Configurable labels (block title, summary, bullets, FAQ) and output style per site
  • Bundled minimal CSS scoped to .bre-geo — optional, can be disabled
  • Custom CSS field for theme-level overrides; output automatically scoped to .bre-geo{…}
  • Fully customizable AI prompt with {title}, {content}, and {language} placeholders

1.0.0 — Initial Release 21 Feb 2026

AI & Meta Generation
  • AI Meta Generator — auto-generates a 150–160 character, SEO-optimized meta description the moment a post is published
  • Customizable prompt with {title}, {content}, {excerpt}, and {language} placeholders
  • Automatic language detection via Polylang, WPML, or WordPress site locale
  • Fallback meta extraction (sentence-boundary-aware, 150–160 characters) — works without an API key or on API failure
  • Multi-provider support: OpenAI (GPT-4.1, GPT-4o, GPT-4o mini), Anthropic Claude (3.5 Sonnet, 3 Haiku), Google Gemini (2.0 Flash, 1.5 Pro), xAI Grok (3, 3 mini)
Bulk Operations
  • Bulk Generator — batch-process posts that have no meta description yet
  • Batched AJAX processing with 6-second rate-limiting delay between batches
  • Transient-based lock prevents simultaneous runs; auto-expires after 15 minutes
  • Up to 3 retries per post with 1-second delay between attempts
  • Live progress log, per-batch cost estimate, and failed-post summary
Schema.org & GEO
  • Schema.org Enhancer — injects JSON-LD structured data for Organization, Article, Author, Speakable, and BreadcrumbList types
  • AI indexing meta tags: max-snippet:-1, max-image-preview:large, max-video-preview:-1
  • BreadcrumbList output suppressed automatically when Rank Math or Yoast SEO is active
  • Organization sameAs social links configurable from the admin
Content Discovery
  • llms.txt — serves a machine-readable content index at /llms.txt for AI retrieval systems
  • Supports custom title, description sections, featured resource links, and post-type selection
  • Pagination for large sites; HTTP ETag / Last-Modified caching; manual cache clear button
Bot & Crawler Management
  • robots.txt manager — block 13 known AI crawlers and data-harvesting bots from the WordPress admin: GPTBot, ClaudeBot, Google-Extended, PerplexityBot, CCBot, Applebot-Extended, Bytespider, DataForSeoBot, ImagesiftBot, Omgili, Diffbot, FacebookBot, Amazonbot
  • Crawler Log — records AI-bot visits (bot name, hashed IP, URL) in a private database table
  • 30-day summary shown on the plugin dashboard; entries purged automatically after 90 days
Editor & Dashboard
  • Meta Description meta box — shows current description, its source (AI / Fallback / Manual), a live character counter, and one-click AI regeneration
  • SEO Analysis sidebar widget — word count, reading time, heading structure, link counts, live warnings
  • Link Analysis dashboard panel — posts without internal links, external-link outliers, top pillar pages by inbound link count
  • Plugin dashboard with provider status, meta coverage per post type, and crawler activity summary
Plugin Integrations
  • Native meta field write-through for Rank Math, Yoast SEO, AIOSEO, and SEOPress
  • Existing descriptions set by those plugins are always respected and never overwritten
  • Standalone meta output suppressed automatically when a supported SEO plugin is active
  • Language detection from Polylang and WPML for correct per-language meta generation
Security
  • KeyVault API key obfuscation — keys are XOR-encrypted with a key derived from WordPress auth salts before database storage; never stored in plain text
  • No OpenSSL extension required
  • SHA-256 IP hashing in Crawler Log — original IP addresses are never stored
Developer
  • bre_prompt filter — customize the AI prompt at runtime
  • bre_meta_saved action — hook into meta description saves for custom workflows
  • Extensible provider architecture — implement ProviderInterface to add custom AI providers