Changelog

Fresh releases. No reheated Schnitzel.

1.3.0 — OpenRouter Integration Latest17 Apr 2026

New Provider
  • OpenRouter is now available as a fifth AI provider — one API key gives access to 600+ models from OpenAI, Anthropic, Google, Meta, Mistral, xAI, DeepSeek and more
  • "Load models" button fetches the curated Marketing/SEO selection directly from OpenRouter, with automatic pricing per 1M tokens
  • Custom model IDs supported (e.g. anthropic/claude-opus-4.7) for access to any OpenRouter-routed model
  • 12-hour transient cache for the model list — no repeated API calls while navigating settings
  • OpenRouter joins the wp-config.php key mapping (BREZNGEO_OPENROUTER_KEY) — define any provider key as a constant to keep it out of the database entirely; the admin field becomes read-only when a constant is present.

1.2.2 — ClassicPress Compatibility 13 Apr 2026

i18n
  • Added explicit load_plugin_textdomain() call for reliable translation loading on ClassicPress and other WordPress derivatives

1.2.1 — Security & i18n 28 Mar 2026

Security
  • Added ABSPATH direct access guards to all PHP class files — prevents direct file execution outside of WordPress
Internationalization
  • Complete German translation — all 394 UI strings now fully translated (dashboard, editor meta boxes, settings pages, keyword analysis, GEO block, link suggestions)
  • Regenerated .po, .mo, and .pot translation files

1.2.0 — Keyword Analysis 27 Mar 2026

Keyword Analysis
  • New Keyword Analysis meta box in the post editor — checks keyword usage across title, headings, density, image alt text, meta description, URL slug, first paragraph, last paragraph, image title/caption, and excerpt
  • Primary and secondary keyword support with configurable minimum occurrences per type
  • Three analysis update modes: live (debounced while typing), manual (button click), and on-save
  • Locale-aware keyword variant matching for English and German — compound words (space ↔ hyphen), trailing-s, and language-specific suffixes (EN: -es, -ing, -ed; DE: -er, -en, -e)
  • Each check reports pass, warning, or fail status with actionable feedback messages
AI-Powered Keyword Features
  • Optional AI keyword suggestions — generates focus keyword ideas based on your post content
  • Optional AI content optimization — actionable tips to improve keyword integration
  • Optional AI semantic analysis — related semantic keywords for broader topic coverage
  • All AI features require a configured API key and are triggered manually from the meta box
Keyword Settings
  • Dedicated settings page under BreznGEO → Keywords with target density, minimum occurrences, post type selection, and debounce interval configuration
  • Keyword Analysis checkbox in AI Features dashboard card for opt-in AI integration

1.1.0 — WP.org Review Fixes 20 Mar 2026

Security & Sanitization
  • Improved $_POST sanitization in Schema.org meta box — uses map_deep() with sanitize_textarea_field instead of relying on downstream sanitization with phpcs suppression
  • Improved $_POST sanitization in Internal Link Suggestions AJAX handler — uses absint() and standard isset() pattern
  • Removed all phpcs:ignore InputNotSanitized comments — all $_POST data is now sanitized inline at the point of access
Fixes
  • Fixed Google Gemini API terms URL that caused too many redirects during WordPress.org review

1.0.0 — Initial Release 7 Mar 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)
  • AI enable toggle — disable AI generation without deleting your API key; includes a cost warning for first-time setup
  • Locale-aware default prompt — German WordPress installs get the German meta prompt, all others get English
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
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)
  • Three generation modes: auto on publish, hybrid (auto only when fields are empty), or manual only
  • Configurable insertion position: after first paragraph (default), top, or bottom of content
  • Four built-in themes: Light (default card), Dark (for dark-mode sites), Minimal (left border stripe only, no box), and Brezn (Bavarian-blue header with CSS diamond / Rauten pattern)
  • Per-post override: enable/disable the block and lock it against auto-regeneration from the post editor
  • Quality gate: word-count threshold suppresses FAQ on short posts (default: 350 words)
  • Accent colour picker for highlight colour customisation
Schema.org
  • Schema.org Enhancer — injects JSON-LD structured data for Organization, Article, Author, Speakable, and BreadcrumbList types
  • 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)
  • VideoObject JSON-LD — auto-detects the first YouTube or Vimeo embed in post content
  • HowTo, Review, Recipe, Event schema types via a dedicated post editor meta box
  • 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
Internal Link Suggestions
  • Editor meta box suggests relevant internal links while you write: "phrase in article" → target post
  • Text-based matching works without an AI key; optional AI upgrade sends top candidates for semantic refinement
  • Multi-select, preview before apply, no automatic insertion without your approval
  • Configurable trigger: manual button (default), on post save, or every N minutes
  • Exclude & Boost settings to skip posts (e.g. Imprint, Contact) or prioritise specific pages
  • Gutenberg + Classic Editor support via official editor APIs
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
  • AI Features card — opt individual features into AI: Meta Descriptions, Internal Link Suggestions, GEO Block
  • Plugin dashboard with provider status, meta coverage per post type, and crawler activity summary
  • Token usage and estimated cost tracking across all bulk and single runs
  • Dismissible welcome notice — shows for 24 hours after first activation, dismissed per user
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
  • GEO Block custom CSS hardened against injection; Schema.org JSON-LD hardened against script injection
Developer
  • brezngeo_prompt filter — customize the AI prompt at runtime
  • brezngeo_meta_saved action — hook into meta description saves for custom workflows
  • Extensible provider architecture — implement ProviderInterface to add custom AI providers