WordPress plugin

Turksem GEO SEO

GEO SEO deals in evidence, not predictions. Every number in it comes from your own server.

Which crawler came, what your server returned to it, what it could actually read, who arrived afterwards. The plugin records all four. You change a rule, and it shows you what happened next.

Version 1.1.0WordPress 6.0+, PHP 7.4+Free, no account
The GEO SEO dashboard inside WordPress: the GEO score dial, the access result for ChatGPT, Claude, Perplexity and Google, the fixes worth making next, and seven-day figures for AI crawler visits, visitors from AI and pages read.
A real screen from a WordPress install with the plugin running. The numbers belong to that demo site; yours reports its own.
1,500
crawlers recognized
90+
checks in the audit
12
report cards kept
0
external requests by default

One Loop, Four Steps

Every part of the plugin belongs to one of these four steps. The last one is the easiest to skip. You measure, you fix, and then nobody tells you whether anything changed; what you are left with is a dashboard full of numbers that produce no decisions.

01

Measure

Who crawled you, what they got back, what they could read, and who arrived from an AI service afterwards.

02

Audit

More than 90 checks over your own content and setup, each finding with a plain-language reason.

03

Fix

Access rules, llms.txt, IndexNow and complementary schema.

04

Prove

Every fix is timestamped into a change log, and a daily check tells you if an AI crawler loses access.

Step one

Who Came, and What They Could Read

The plugin recognizes 1,500 crawlers. At the core are 37 AI crawlers, each named in the documentation of the company that runs it, with that document linked right beside it. The other 1,463 are SEO tools, search engines and monitors from an open, community-kept list. We do not pad either list with crawler names that do not exist.

AI crawler log
Every visit from GPTBot, ClaudeBot, PerplexityBot, Googlebot and the rest, with the page, the status code and the time. The two permission tokens that never crawl anything, Google-Extended and Applebot-Extended, are labeled as exactly that instead of being counted as bots.
Access diagnosis
We fetch your own page as each agent and compare the answers. When a security plugin or a hosting rule quietly returns 403 or 429 to a crawler, your dashboard stays empty and robots.txt explains none of it. This test names the block.
Raw HTML visibility
None of the major AI crawlers run JavaScript. We look for your posts' own sentences in the raw HTML and report what percentage survives, page by page.
Crawl waste
How many of an agent's requests land on dead URLs. Measurements put AI crawlers around a third, against roughly a tenth for Googlebot. Every broken address takes the place of a page they could have read.
Timing and silence
How long the first AI agent took to arrive after you published, which agents used to come regularly and have gone quiet, and which published pages no AI agent has ever fetched. A stop is bigger news than a spike.
Visitors from AI
Real people arriving from ChatGPT, Perplexity, Gemini and Copilot, caught both by referrer and by the address tag. The count is an undercount and the plugin says so: AI apps routinely strip the referrer, and a reader who copies the address leaves no trace at all.
Every other crawler
SEO tools, search engines, uptime monitors, feed readers and scripts. Their visits are counted once per crawler per day, so a busy SEO tool cannot bloat your database, and you can search all 1,500 names to see whether one has been by.
Your own bot
Add any crawler by name, your own company's for example. From that moment the plugin counts its visits and can test whether it is able to read your site. Visits from before you added the name stay unknown, because user agents are never stored, and the screen says exactly that.
This is the test that explains an empty crawler table. It runs from inside your own server, against your own site.

Step two

The Audit Runs Inside Your Server

The audit reads your content straight from the WordPress database and makes two requests to your own site. No external crawler, no quota, no account. Auditing a site with five hundred posts is exactly as free as auditing one with a single post.

More than 90 checks
Titles, meta descriptions, duplicate H1s, missing image alt text, stale content, orphan pages, robots.txt hygiene, llms.txt quality and your structured data inventory.
Every finding says why
A finding you cannot act on is not a finding, it is noise. So every line carries two things: why this matters, and which field on which screen you need to change.
Text that crept into your posts
The audit also looks for spam text and hidden links injected into your posts, and shows you any gambling, pharmacy or counterfeit traces it finds. If those words belong to your own industry, they are ordinary content; the plugin makes that distinction too, instead of raising an alarm you cannot judge.
The audit screen: the overall score and eight category scores at the top, and below them findings that each state why they matter and how to fix them.
A real audit on a demo site. Every finding names how many items it affects and links straight to them.

Step three

You Set the Rules

Nothing here turns itself on. Each control is a decision you make, and the plugin tells you when a decision cannot do what you expect.

The AI access matrix: agents grouped by category, each row showing the vendor, a link to that vendor own documentation and an allow or block control.
Every agent links to its vendor own documentation. Changing a row writes into the managed block of your robots.txt, and nothing else in that file is touched.
AI access matrix
You allow or block each agent, one row at a time. The rule goes into a managed block of your robots.txt, and the rest of the file is left alone. If a hand-made robots.txt file exists on your server, GEO SEO does not fight it; it tells you instead.
Two cases that get mixed up
Google-Extended and Applebot-Extended never make a request. Blocking them stops no crawling, because there is no crawling to stop. User-triggered fetchers such as ChatGPT-User state in their own documentation that they may ignore robots.txt, so a block there may not stop them either. The matrix says both, right next to the row.
llms.txt in one click
The plugin generates a draft, grades it against its own criteria, and publishes it. On the same screen it also tells you plainly that the file is unlikely to help you today; the reason is further down, under What We Cannot Measure.
IndexNow and complementary schema
When you publish or update a post, the plugin pings IndexNow search engines right away; turning that on is your call. If no other SEO plugin outputs structured data, GEO SEO emits clean Organization, WebSite and Article JSON-LD; if one does, GEO SEO switches its own off rather than duplicating markup.

Step four

Proof That the Fix Did Something

A number without a before and after cannot tell you whether the work was worth doing. This step is what closes that gap.

Change log
Every fix you apply, whether a robots rule, an llms.txt publish or IndexNow going on, is stamped with a time and drawn onto the charts.
Audit history
Your last 12 report cards are kept, so crawler activity and scores can be read against the changes instead of in isolation.
A daily access check
Once a day the access test runs again. If an AI crawler that could read your site starts getting blocked, the plugin confirms with a second test, then puts a warning on every one of its screens and, if you asked for it, sends you one email. When access comes back, the warning clears itself.
A weekly summary
If you want it, one email a week with AI crawler visits, visitors from AI answers and your score. Like the alert, it goes to your site's admin address and links only to your own dashboard.
The mark is a change you made. What the plugin gives you is the comparison, not a promise about which direction it will go.

Content Intelligence: Your AI, Your Key

Connect your own AI provider key and have your posts reviewed through an E-E-A-T lens. E-E-A-T is the four-part shorthand Google uses when it describes content quality: experience, expertise, authoritativeness, trust. The plugin opens that into eight criteria: signs of first-hand experience, depth of expertise, author identity, sourcing, freshness, answer clarity, originality and trust signals.

Why bring your own key
When the key is yours, the cost stays under your control, and this work runs to a few dollars a month. Your content goes only to the provider you picked, and we are entirely out of the loop. There is no account in the middle and no subscription on top.
Cost discipline built in
Reviews run one post at a time on your click, never in bulk and never in the background. Results are cached until the post changes, and a monthly cap that you set protects your bill.
Interpretation, not measurement
The plugin states this inside its own interface: two runs on the same post can differ. Measured numbers stay on the evidence pages, and the AI's judgment stays on this one.

What We Cannot Measure

Knowing what a tool cannot do is as useful as knowing what it can. These four limits are printed inside the plugin as well, on the screens where they actually matter.

Whether an AI names you
Whether a model mentions you in an answer, which questions people actually ask, and how visible your competitors are: none of that can be measured from inside a WordPress install, and the same question returns different answers through the day. We will not invent a number for it.
llms.txt will not move your score
In a study of 137,000 domains, 97% of published llms.txt files were never requested, the biggest requester of those files was SEO audit tools rather than AI systems, and Google states it does not use them. We ship the generator because it costs nothing, and we say this next to the button.
Structured data is a correctness check
It is offered as a correctness check, not an AI ranking lever. The best causal study on the question found no citation lift, and Google says no special markup is required.
The access test may not reach your CDN
The test request starts on your own server, and whether it passes through a CDN or firewall service depends on how your domain resolves from there. When the answer does come back through a service the plugin recognizes, such as Cloudflare, Sucuri or Fastly, and that service stops the test, the plugin says so and does not lower your score: those services recognize real crawlers by their network, and the test comes from your server. A block at an edge the test never reaches stays invisible to it.

What Leaves Your Server

By default, nothing. The crawler log and the audit run entirely inside your install, and the audit's requests go to your own site only. Three features send something out, each only once you have agreed to it. The fourth item below is just a link.

IndexNow
When you publish or update a post, the plugin sends the post URL, your site host and your IndexNow key to the IndexNow service so participating search engines can fetch the change faster. No personal data is included.
Content Intelligence
If you connect your own AI key, the content of a post goes to the provider you chose at the moment you click Review this post, together with the title, author name and dates. Nothing is sent while the feature is off, and there are no scheduled or background submissions.
Email alerts
The daily access alert and the weekly summary go to your site's admin address through WordPress's own mail function. Setup offers both switched on and you can turn either off right there; on sites upgrading from version 1.0 they stay off until you switch them on.
A link to the Türk SEM panel
The settings page contains a plain link to our monitoring panel. It only opens the site in a new tab. The plugin sends nothing to turksem.com, and you need no account to use it.

One more thing worth stating plainly: no IP address is ever written to the database. The AI crawler log stores the agent name, category, page, HTTP status and a one-way hash of the user agent string, and nothing else. For every other crawler, only its name, category, the day and the visit counts are kept.

If You Found This Address in Your Server Log

You are probably reading a line that ends with +https://www.turksem.com/geoseo. That request came from Turksem GEO SEO, a WordPress plugin installed on the site being requested, and it was almost certainly triggered by the site's own administrator.

The plugin's access diagnosis fetches a page of your own site four times, each time identifying itself as a different AI crawler, and compares the answers. That is how it detects a security plugin or a server rule that quietly refuses those crawlers. The requests originate from your own server, they go only to your own site, and there are only a handful of them per run.

It is not a crawler of ours, it never visits sites that have not installed it, and there is nothing to block on your end. If you did not install the plugin yourself, ask whoever administers the site.

Installation

Three steps, and setup opens by itself after activation. One thing worth knowing before you start: the plugin's own interface is English in this version.

  1. 1Install it from the directory under Plugins, Add New, or upload the ZIP there, or copy the turksem-geoseo folder into wp-content/plugins.
  2. 2Activate the plugin. Setup opens automatically and runs a first check, usually in under a minute.
  3. 3Read your results, choose what keeps running in the background, then take the short tour of the dashboard.

Tried it? Two minutes of feedback shapes the next version. Tell us what you think

Release Notes

Every version is listed here with its date, in the same order as the changelog on WordPress.org. Each entry separates what is new, what got better and what was fixed, so you can tell at a glance whether an update matters to you.

  1. 1.1.0

    Current version

    Recognizes 1,500 crawlers, lets you watch your own bot, and tells you when an AI crawler loses access.

    New

    • Crawlers page: 1,500 recognized crawlers (37 AI crawlers documented by their vendors plus 1,463 from the open crawler-user-agents list), which of them visited in the last 30 days, and a search across all of them.
    • Watch list: add your own bot by name, see whether it comes, and test whether it can read your site.
    • Daily access check: when an AI crawler loses access, a second test confirms it, a warning appears on every plugin screen and, if you want, one email goes out.
    • Weekly summary email, if you want it: AI crawler visits, visitors from AI answers and your score.
    • Setup in three short stops, followed by a five-step tour of the dashboard.

    Improved

    • The access test recognizes CDN and firewall services (Cloudflare, Sucuri, Imperva, Akamai, Fastly, Bunny CDN). If one of them stops the test request, the plugin says so and does not lower your score.
    • A test that could not run is reported as untestable, not as a block.
    • The dashboard shows seven-day comparisons, your progress milestones and the fixes worth making next.
    • Redesigned screens in the Türk SEM look, with the fonts bundled in the plugin. Tables turn into cards on phones.

    Fixed

    • The plugin's own test requests were logged as AI crawler visits, which could also mark a false first visit. They are no longer logged, and the update removes the old rows.
    • Saving Settings could switch the uninstall policy to delete all data. The update sets it back to keeping your data.
    • Counts read correctly in the singular: 1 visit, not 1 visits.

    If you are upgrading

    Your data and settings stay. Email alerts stay off until you switch them on in Settings, and each administrator sees a three-step summary of what is new, once. If you had chosen on purpose to delete your data on uninstall, choose it again in Settings.

  2. 1.0.0

    First release on WordPress.org.

    New

    • AI crawler log built on 39 agents documented by their own vendors. No IP address is ever stored.
    • Access diagnosis, raw HTML visibility, crawl waste, time to first crawl and agents that went quiet.
    • Visitors from AI services, counted by referrer and by address tag.
    • Site audit with more than 90 checks, each with its reason and a fix.
    • AI access matrix, llms.txt generator with a grader, IndexNow and complementary schema.
    • Change log and your last 12 report cards.

Where This Plugin Comes From

We did not design GEO SEO at a desk. It came out of client work. Every check in it started as a question we kept running into on real sites: why is the crawler log empty, why does the AI see a different page than the visitor does, why did a fix change nothing. We are an agency, not a software company, and the plugin shows it: it measures, it explains, and it leaves the decision to you. The three pages below tell the longer story.

SEO since 1999

We built our first website in 1999 and have worked on thousands of sites since. The 90-plus checks in the audit are the list we walk through on every client site, written down and turned into code. The page explains how we work and why we turn down most SEO requests.

What is SEO?

GEO, before it had a name

We started working on visibility in AI answers before the industry settled on a name for it, and we wrote the guide to what GEO is. The plugin covers the part of that work you can measure from your own server: which AI crawlers come, what they can read, and what changed after each fix.

What is GEO?

AIO as a service

AI optimization is the fourth service we offer, and it follows the same flow as our SEO methodology. The plugin gives you the measuring side of that work for free. The service page explains what we build on top of it.

What is AIO?

Questions We Get

What is Generative Engine Optimization?
It is the work of getting your content read, understood and used by AI systems such as ChatGPT, Claude, Perplexity and Google's AI features. It has nothing to do with local or geographic SEO. GEO SEO covers the part you can actually measure from your own server: which AI crawlers come, what they can read, and what changed after each fix.
Does GEO SEO replace Yoast SEO or Rank Math?
No, and it does not try to. It runs next to them, reads their meta descriptions for its audit, and disables its own schema output while they are active. Use it for what they do not do: AI crawler measurement, AI access control and proof of change.
Can I block ChatGPT, Claude or Perplexity from crawling my site?
Yes, one agent at a time, written into a managed block of your robots.txt. The plugin also tells you when a block cannot work: user-triggered fetchers such as ChatGPT-User say in their own vendor documentation that they may ignore robots.txt, and we will not pretend otherwise.
Does it slow my site down?
Each page view runs one early check. For a regular visitor that is a single precompiled pattern match, measured at about ten microseconds. The database is written only when a known crawler matches. On very busy sites you can sample, logging one request in five or one in ten. The audit runs in the admin area, in batches.
Where is my visitors' personal data stored?
It is not. The AI crawler log stores the crawler's name, page URL, timestamp and a short one-way hash of the user agent string; for other crawlers only the name, the day and the visit counts are kept. IP addresses are never written to the database.
Some crawler visits seem to be missing.
If a full-page cache serves the request, WordPress never runs and the visit cannot be logged. The dashboard states this openly. Your counts are a reliable floor, not an exact total.
Which crawlers does it recognize?
Two lists. The first holds the AI agents named in their own vendors' documentation: 37 crawlers, plus Google-Extended and Applebot-Extended, which are permission tokens and never fetch anything. The second adds 1,463 crawlers from the open crawler-user-agents list: SEO tools, search engines, monitors, feed readers and scripts. Any crawler you add by name comes on top.