Changelog
1.3.5 — Footer & Translations Latest5 Mar 2026
Changed
- Admin footer — updated across all plugin pages to "developed by 🍺 noschmarrn.dev for Donau2Space.de" with links to both sites.
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-geocustom 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 rejectsexpression(),javascript:, andurl()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_SLASHEStowp_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_/brezngeoprefix.
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_tobrezngeo_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.jsreplaced with properly localized equivalents viawp_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, andheight - 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
HowTowithHowToStepentries - Review — product / service name and star rating (1–5), outputs
ReviewwithRating - Recipe — name, prep time, cook time, servings, ingredients, and instructions; outputs full
Recipeschema with ISO 8601 durations - Event — name, start date, end date (optional), location or URL; online/offline toggle outputs
PlaceorVirtualLocation - 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\uXXXXescape 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_statushook; 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
sameAssocial links configurable from the admin
Content Discovery
- llms.txt — serves a machine-readable content index at
/llms.txtfor 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_promptfilter — customize the AI prompt at runtimebre_meta_savedaction — hook into meta description saves for custom workflows- Extensible provider architecture — implement
ProviderInterfaceto add custom AI providers