Changelog
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.phpkey 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
ABSPATHdirect 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.pottranslation 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
$_POSTsanitization in Schema.org meta box — usesmap_deep()withsanitize_textarea_fieldinstead of relying on downstream sanitization with phpcs suppression - Improved
$_POSTsanitization in Internal Link Suggestions AJAX handler — usesabsint()and standardisset()pattern - Removed all
phpcs:ignore InputNotSanitizedcomments — all$_POSTdata 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
sameAssocial 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.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
- 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_promptfilter — customize the AI prompt at runtimebrezngeo_meta_savedaction — hook into meta description saves for custom workflows- Extensible provider architecture — implement
ProviderInterfaceto add custom AI providers