From bloggers. For bloggers.

No Schmarrn.
Just SEO.

No readability scores grading your prose. No annual renewal email. No "unlock the good stuff" paywall. Free, forever — built in Bavaria.

Installation

Getting started

Start right away — no API key needed

You can install this today and it will quietly start doing things for your blog — without you creating any account or entering any code anywhere. These features kick in the moment you activate it:

  • Fallback meta description (reads the opening of your post and trims it to 150–160 characters)
  • Schema.org structured data (tells search engines and AI who you are)
  • llms.txt (your content index for AI systems)
  • robots.txt manager (block individual AI training bots)
  • Crawler log (see which AI bots visit your site)
  1. Install the plugin.In your WordPress admin: PluginsAdd Newsearch "BreznGEO"InstallActivate
  2. Find it in the sidebar. You will see BreznGEO in your left admin menu.
  3. Fill in your site info. Go to BreznGEO → Settings. Set your organisation name, site type (blog, news site, company, etc.), and add social profile links if you have them. This powers the Schema.org data.
  4. Check your llms.txt. Open yourdomain.com/llms.txt in a browser. You should see a list of your posts. That means it is working.
  5. You are done. The plugin now adds structured data and a machine-readable content index to every page, automatically.

Add an API key for AI features

An API key is what unlocks the AI magic: the plugin calls an AI model when you publish, gets a description back, and saves it. That's the whole mechanism. Here's how to set it up:

  1. Get an API key from one of the four supported providers (see the section below). You only need one.
  2. Go to AI Provider settings: BreznGEO → AI Provider. Select your provider, paste the key, choose a model, and save.
  3. Pick a model. For meta descriptions, a cheap and fast model is perfect. gpt-4o-mini, gemini-2.0-flash, or claude-3-haiku all work great and cost fractions of a cent per post.
  4. Publish a test post. Check the Meta Description (BreznGEO) box below the editor. You should see a freshly generated description. Done.
You don't need to publish a new post to test this. Open any existing post, scroll down past the editor to the Meta Description (BreznGEO) box, and click Regenerate with AI. The description updates instantly. No republishing needed.

Configuration

API keys — demystified

An API key is a personal password for an AI service — a long string of letters and numbers you copy from their website and paste here. The plugin sends your post text to the AI, gets a description back, done. The bill goes directly to them, not through us.

You only need one key from one provider. Pick the one you already use, or go with Google Gemini if you want to start completely free.

OpenAI

gpt-4.1 · gpt-4o · gpt-4o-mini

The most well-known provider. GPT-4o mini is extremely cheap (~$0.001 per meta description) and writes solid descriptions. GPT-4.1 gives the highest quality for longer GEO blocks.

Where to get your key: platform.openai.com → API keys → Create new secret key

Anthropic Claude

claude-3-5-sonnet · claude-3-haiku

Excellent at following structured instructions — which makes it very reliable for the JSON-based GEO block generation. Claude Haiku is fast and economical.

Where to get your key: console.anthropic.com → Settings → API keys

Google Gemini

gemini-2.0-flash · gemini-1.5-pro

Gemini 2.0 Flash has a generous free tier and very fast responses. A great option if you want to start generating at zero cost while you decide whether to commit.

Where to get your key: aistudio.google.com → Get API key

xAI Grok

grok-3 · grok-3-mini

A capable and competitively priced alternative from Elon Musk's AI company. Grok 3 mini works well for meta descriptions. Good option if you are already in the X ecosystem.

Where to get your key: console.x.ai → API keys
Security note: The key you paste in the UI is encrypted before being stored — it's not sitting in plain text in your database. If you want maximum security and you know your way around wp-config.php, you can define it there instead: define('BRE_OPENAI_KEY', 'sk-...');. The plugin picks it up automatically and nothing touches the database. Most bloggers don't need to bother with this.

Why it works

SEO & GEO — what does that actually mean?

You are already set up and running. Here is why any of this matters — and why the plugin does what it does every time you hit Publish.

Classic

SEO

Search Engine Optimisation. The art of convincing Google (and Bing, and friends) that your article is worth showing to people who search for a topic you cover.

The most visible piece is the meta description — that two-line summary Google shows beneath your link in search results. You have probably written dozens of them without realising they have a name. Most bloggers skip them and leave Google to guess. That guess is usually not great.

New kid on the block

GEO

Generative Engine Optimisation. When someone asks ChatGPT, Perplexity, or Google's AI Overview a question, the AI reads websites and generates an answer — often citing specific sources.

GEO is about making your content easy for AI to read, understand, and quote. Structured summaries, clear key points, a machine-readable content index — these increase the chance an AI says "according to your site" instead of your competitor's.

SEO and GEO are not in competition. Good SEO brings visitors from Google. Good GEO brings citations from AI systems. Both drive traffic. This plugin does both — automatically, on every post you publish.

The big picture

What this plugin actually does for you

You write the posts. The plugin handles the discoverability stuff — automatically, on every publish, without charging you a cent. Here's the full list of what it does quietly in the background.

  • Writes your meta descriptions for you That two-line snippet in Google search results — the one most bloggers leave empty or half-finished. The plugin reads your post and writes a tight, 150-character description the moment you hit publish. No more staring at a blank field.
  • 📋
    Tells AI systems what your site is about Generates structured data (Schema.org) that helps ChatGPT, Perplexity, and Google's AI understand who you are, what you write about, and why you are a credible source. This is the "invisible layer" of your site that most bloggers never set up.
  • 📚
    Creates a machine-readable index of your content Serves a special file called llms.txt — basically a structured table of contents for AI systems. When an AI crawler visits your site, it can get an overview of everything you have written without having to crawl every single page.
  • 👁
    Shows you which AI bots are visiting Logs every visit from known AI crawlers (GPTBot, ClaudeBot, Perplexity, etc.) and shows you a summary on the dashboard. You can also block specific bots that are just scraping your content to train their models — individually, with one checkbox.
  • 🆕
    Adds a "Quick Overview" block to your posts Generates a summary, key bullet points, and FAQ for each post — collapsed at the top of your content. Readers love it. AI systems love it even more: it gives them a pre-structured answer to extract and cite. Optional, fully editable.
  • 🔗
    Suggests internal links while you write Analyses your post and finds which of your other posts would make a good link — with the exact phrase to link and the target post. You review, tick what you want, confirm. Links go in automatically at the right spot. Nothing without your approval. Most SEO tools charge extra for this. BreznGEO includes it free.
💰 What does all of this cost? The plugin is free. Forever. The only optional cost is AI API usage — billed directly by the provider, not us. Generating 1,000 meta descriptions with a cheap model costs less than a dollar. Everything else (Schema.org, llms.txt, robots.txt, crawler log) costs nothing at all — no API key needed.

What's in the box

Every feature, explained without the jargon

AI Meta Descriptions BreznGEO → Meta Generator

What it does for you: Every time you publish, the plugin calls an AI model with your post title and content and gets back a tight 150–160 character description. That becomes the snippet Google shows under your link in search results. A good snippet = more people click. More clicks = Google likes you more. You probably haven't written a single meta description in years. Now you don't have to.

The prompt is fully customisable — use {title}, {content}, {excerpt}, {language} placeholders. Language detection is automatic (Polylang and WPML supported). If you use Rank Math, Yoast, AIOSEO, or SEOPress, the description is written directly into that plugin's field — not a separate one. Works with your existing SEO setup, not against it. If no API key is configured, it falls back to a smart sentence-boundary extraction from your post content.

Bulk Generator BreznGEO → Bulk Generator

What it does for you: Got 80 old posts with no meta descriptions? Don't open them one by one. Hit Start, go make coffee, come back to a fully processed archive. Every post that was missing a description now has one. The ones that already had one are skipped. It's as boring to run as it sounds — which is exactly the point.

Processes in batches of 5 (configurable), with a 6-second pause between batches to avoid hitting rate limits. Shows a live log as it runs. Skips posts that already have a description. Up to 3 retries per post. A running cost estimate shows what the session is costing you in real time. Safe to stop and resume — already-generated posts are skipped on the next run.

Schema.org Structured Data BreznGEO → Settings → Schema

What it does for you: Adds invisible structured data to every page — who wrote it, what it's about, when it was published, what kind of site this is. You never see it. Search engines and AI systems do. They use it to decide if you're a credible source worth showing to people. Think of it as leaving a clear business card for robots.

Outputs JSON-LD for: Organization, Article, Author, Speakable, BreadcrumbList, BlogPosting (with embedded author and image), ImageObject, VideoObject (YouTube/Vimeo auto-detected), and FAQPage (auto-generated from your GEO Quick Overview). Optional per-post meta box for HowTo, Review, Recipe, and Event schema types — enter the data once, JSON-LD is output automatically. Social profile links (Twitter/X, LinkedIn, GitHub, YouTube, etc.) are included as sameAs references. Schema output is automatically suppressed for sections that Rank Math or Yoast already handle, so you never get duplicate structured data.

GEO Quick Overview Block BreznGEO → GEO Block

What it does for you: Adds a collapsible box at the top of each post with a short summary, key bullet points, and (for longer posts) a FAQ. Human readers love it — they can scan the gist before committing to the full read. AI systems love it even more: it's pre-structured content they can extract directly and quote. If you want ChatGPT to cite your blog, this box is your best shot.

Three generation modes: auto on every publish, hybrid (auto only when empty — safe for manual edits), or manual only. Three positions: after first paragraph, top, or bottom of content. Three display styles: collapsible (default), always open, or store-only (data stored, nothing shown — useful for custom themes or headless setups). Per-post override: enable/disable the block and lock it against auto-regeneration from the post editor. Four built-in display themes: Light (default card style), Dark (for dark-mode sites), Minimal (no box, left border stripe only), and Bavarian (Bavarian-blue header with diamond pattern). Accent colour picker for highlight colour customisation.

llms.txt BreznGEO → llms.txt

What it does for you: Creates a file at yourdomain.com/llms.txt — basically a structured table of contents for AI systems. Instead of making a crawler visit every page on your site, you hand it a clean list of everything you've written and where to find it. It's a new standard that AI companies have started to support, and it costs you nothing to have one. The plugin generates and maintains it automatically.

Follows the emerging llms.txt standard. Auto-generated from your WordPress post/page index — no maintenance. Paginated for large sites. Add custom intro sections (your site's purpose, editorial guidelines, contact info) via the settings page. Proper HTTP caching (ETag, Last-Modified) so AI crawlers only re-fetch when your content actually changes.

robots.txt Manager BreznGEO → robots.txt

What it does for you: Some AI companies send bots to harvest your content for model training — no traffic back to you, just a free lunch at your expense. This feature lets you block them one by one. One checkbox per bot, done. No editing files, no FTP, no touching your server. Block the ones that take, allow the ones that send you visitors.

Covers 13 known AI training and harvesting bots: GPTBot, ClaudeBot, Google-Extended, PerplexityBot, Bytespider, CCBot, Amazonbot, anthropic-ai, and more. Works alongside your existing robots.txt — only adds the Disallow rules you enable. Normal search engine bots (Googlebot, Bingbot) are never touched.

Crawler Log BreznGEO → Dashboard

What it does for you: Shows you which AI bots visit your site, how often, and when. (Yes, GPTBot is probably already on your site. Don't panic — that's a good thing.) If Perplexity visits frequently, your content is likely showing up in Perplexity answers. If a bot you've blocked keeps appearing, you know something's off. It's a window into the AI traffic most bloggers don't even know they have.

Records bot name, a hashed (anonymised) IP, and the requested URL. Auto-purges records older than 90 days via WP-Cron. The dashboard shows a 30-day summary table sorted by visit count.

Common questions

FAQ

Does this replace Yoast / Rank Math / AIOSEO?

Not necessarily — and it does not have to. BreznGEO is designed to work alongside existing SEO plugins. If Rank Math or Yoast is active, BreznGEO writes the AI-generated description directly into their meta field and suppresses duplicate Schema.org output. You keep your existing setup; BreznGEO adds the AI layer on top.

Will this get my site to #1 on Google?

No tool can promise that — and any plugin that does is lying. What this plugin does is handle the technical basics correctly and automatically: meta descriptions that are the right length, structured data that is correctly formatted, a content index that AI systems can read. These are table stakes, not magic. Rankings still depend on your content quality and backlinks.

How much does the AI usage actually cost?

Very little. A single meta description is around 1,500 tokens. With GPT-4o mini that is roughly $0.001 per post. For 1,000 posts: about $1. The GEO Quick Overview block uses more tokens (~800 per post) but is still well under $0.01 each with a budget model. Real-world data from Donau2Space.de: 175 AI operations in one day — total cost $0.49 with GPT-4.1.

What happens if the AI returns a bad description?

You have full control. Every post has a Meta Description editor box. Open the post, read what was generated, edit it if needed, save. You can also regenerate with one click. The AI description is a starting point — not a locked-in result.

I write in German. Will the descriptions be in German?

Yes. The plugin automatically detects your WordPress site language and tells the AI to generate in that language. It also supports Polylang and WPML, so multilingual sites get descriptions in the correct language per post. The detection covers 30+ locales out of the box.

Is my API key safe?

API keys entered via the admin UI are obfuscated using XOR encryption with a key derived from your WordPress authentication salts before being stored in the database. They are never stored or transmitted in plain text. The admin UI always shows keys masked — only the last 5 characters visible. For maximum security, define your key in wp-config.php instead — it is then never stored in the database at all.

How do Internal Link Suggestions work without an AI key?

BreznGEO tokenises your post content and all candidate posts, then scores matches using four weighted signals: title keyword overlap (×3), tag overlap (×2), post excerpt overlap (×1.5), and category overlap (×1) — no AI needed. The anchor phrase is picked from the candidate's full topic (title + tags + excerpt + categories), so a post about the Danube can link to a Deggendorf post via a shared tag, even if "Deggendorf" never appears in your article. If you connect an API key and enable "Link Suggestions" in the Dashboard AI Features card, the top-scoring candidates are optionally re-ranked by the AI for semantic relevance. AI re-ranking is an optional upgrade; the keyword-only mode is already effective for most blogs.

The GEO Quick Overview block shows strange characters (like u00e4 instead of ä). What do I do?

This was a bug in versions before 1.1.1. Update the plugin to v1.1.1 or later — the encoding issue is fixed. If you already have the latest version and still see it, regenerate the affected block by opening the post and clicking Regenerate in the GEO editor box.

💻 Developer section — safe to skip

For theme developers

GEO Block — CSS classes & custom properties

You're a blogger. Skip this section. Seriously. The built-in settings (accent colour, theme picker) cover most needs. Everything below is for developers who want additional control or want to style the GEO block from scratch in their theme.

The GEO block renders a single <details> element. All styling is scoped to .bre-geo and driven by CSS custom properties. You can override any token globally in your theme stylesheet.

HTML structure

<!-- Rendered by renderBlock() — attributes vary by settings -->
<details class="bre-geo" data-bre="geo"
         data-bre-theme="light"       <!-- "light" | "dark" | "minimal" | "bavarian" -->
         style="--bre-accent:#e67e22;"  <!-- only when accent color is set -->
         open>                           <!-- only when output_style = open_always -->

  <summary>
    <span class="bre-geo__title">Quick Overview</span>
  </summary>

  <div class="bre-geo__section bre-geo__summary">
    <h3>Summary</h3>
    <p>...</p>
  </div>

  <div class="bre-geo__section bre-geo__bullets">
    <h3>Key Points</h3>
    <ul><li>...</li></ul>
  </div>

  <div class="bre-geo__section bre-geo__faq">
    <h3>FAQ</h3>
    <dl>
      <dt>Question?</dt>
      <dd>Answer.</dd>
    </dl>
  </div>

</details>

CSS classes

ClassElementNotes
.bre-geo <details> Root element. All custom properties live here. Carries data-bre-theme attribute set to the active theme name.
.bre-geo__title <span> Block title inside the summary bar. Configurable in settings ("Quick Overview" by default).
.bre-geo__section <div> Wrapper for each content section. Has top border and padding.
.bre-geo__summary <div> The summary text section. Contains <h3> + <p>.
.bre-geo__bullets <div> Key points section. Contains <h3> + <ul>.
.bre-geo__faq <div> FAQ section. Contains <h3> + <dl> with <dt>/<dd> pairs.

Built-in themes

data-bre-theme valueDescription
lightDefault. Light gray card, WordPress blue accent.
darkDark background for dark-mode sites.
minimalNo outer box. Left border stripe only. No accent colour.
bavarianBavarian blue. Summary bar with CSS diamond (Rauten) pattern.

CSS custom properties

PropertyLight defaultDark defaultControls
--bre-accent#0073aa#4ea8d8Summary bar left border stripe + expand arrow
--bre-bg#fafafa#1e1e1eBlock background
--bre-border#e0e0e0#3d3d3dOuter block border
--bre-sec-border#e0e0e0#3d3d3dSection separator borders
--bre-label#666#999Section heading text (SUMMARY, KEY POINTS, FAQ)
--bre-faq-ans#444#bbbFAQ answer text

Customisation examples

/* ① Override a token in your theme stylesheet — affects all GEO blocks */
.bre-geo {
    --bre-accent: #e67e22;
}

/* ② Target a specific theme variant */
.bre-geo[data-bre-theme="minimal"] {
    border-left-color: #e67e22;
}

/* ③ Target a specific page or post type */
.single-review .bre-geo__faq { display: none; }

/* ④ Opt out of all plugin CSS — style .bre-geo from scratch in your theme */
    Add to your theme's functions.php:
    wp_dequeue_style( 'brezngeo-geo-frontend' );
This page is kept up to date. New feature? New question asked twice in the forum? It gets added here. Check the Changelog for a full version history. Something missing or wrong? Open an issue at github.com or drop by the support forum.