I ran an audit on my own site
There is no point talking about a site that has not been measured. That sentence had to apply to my own site too.
What is easy when you look at someone else's site gets hard when you look at your own: separating what is a measurement from what is a wish.
This piece is the audit itself. Twelve phases, ten dimensions, two separate scores. A framework that tries to measure not how good the site is, but which half of the work is finished.
Two scores, because two different questions
Classic search and AI answers do not reward the same things. When the same ten measurements are multiplied by two different weightings, two numbers come out:
| SEO | GEO | |
|---|---|---|
| Score | 50/100 | 36/100 |
| Band | Weak | Critical |
The fourteen-point gap is the single most valuable output of the report. The cause is in the weights: on the SEO side the heaviest items are accessibility and on-page quality — where this site is strongest. On the GEO side the heaviest item is off-site brand signals, and the site scores 5/100 there.
In one sentence: everything within my control has been done right, and nothing outside my control exists yet.
The evidence regime
The framework's hardest rule is not in the measuring but in the writing: a sentence without evidence does not enter the report. Beside every finding sits a URL that was actually fetched, a command output, or a tool measurement. "Probably", "generally", "may be" are banned.
The second rule requires an evidence level label on every recommendation:
| Level | Meaning |
|---|---|
| A | Platform owner's official documentation, or direct measurement |
| B | Consistent correlation across several independent studies |
| C | A single study, a limited sample, or logical inference |
| D | Industry folklore, unverified |
This has a practical consequence: a level-D recommendation cannot be given high priority. It automatically pushes down the "do this too, it can't hurt" advice so common in SEO.
An example: the llms.txt file. It exists on the site, it is generated correctly, its content is not written by hand. But the report tagged it level C and kept it low priority — because Google stated plainly that it does not use the file for Search or AI features, and large-scale log analyses found AI search crawlers almost never fetch it. It has value, just not where it is claimed: in agent accessibility, not search visibility.
When auditing your own site that label is the most useful thing in the toolkit. It ties the urge to inflate your own work to a number.
Zero across five indexes
Bing, DuckDuckGo, Brave, Yandex and Google — a site: query returned zero on all five. DuckDuckGo said so outright: "no results found". Bing ignored the operator entirely and returned unrelated results.
That looks like a fault. It is not. The repository history shows all twenty-one commits landed on the same day, and the Wayback Machine holds no snapshot of the domain at all. The site is less than a day old.
A one-day-old site being absent from every index is expected behaviour. The real question here is not the zero itself, but how much of the zero resolves on its own.
The actual problem: seven Murat Tunalıs
In the top ten results for the brand query, zero belong to this site. Those who share the top ten:
| Who | Measured weight |
|---|---|
| Author and trainer in personal development | 18 years — 158 Wayback snapshots (2007→2026), published books, six of the top ten |
| Family counsellor, Istanbul | Same city — the riskiest overlap |
| Men's barber, Bursa | |
| Musician and arranger | Eight album pages on Wikipedia |
| A systems and network specialist with a near-identical surname | |
| Two social media accounts |
The most instructive comparison is in Common Crawl, the open crawl archive that feeds the training corpora of large language models:
| Crawl | This site | The namesake's site |
|---|---|---|
| July 2026 | 0 | 22 records |
| June 2026 | 0 | 36 records |
| May 2026 | 0 | 26 records |
So: if a model recognises the name "Murat Tunalı" from its training data, the person it recognises is not me. Only he is in the corpus.
An engine merging three people
The live test put eight queries to three engines. The citation rate came out zero — that was the expected result. What was not expected was the content of Bing's answer.
I wrote the domain into the query explicitly. The answer that came back was this:
Murat Tunalı, born in İzmir in 1982, is a men's hairdresser and an educator-author. Bringing classical barbering together with a modern grooming approach, Tunalı operates as a premium men's hairdresser in Bursa. He is also a professional specialised in family counselling and provides consultancy services in Istanbul.
At least three different people are fused in one paragraph: a barber in Bursa, an author born in İzmir, a family counsellor in Istanbul. The fourth person, the systems engineer — that is, me — is not in the answer at all.
Perplexity was more honest about the same thing. Asked a qualified query, it said it "could not reach a profile clearly matching this description" and offered near-name substitutes instead.
The difference between the two matters. Being invisible is a problem. Being confidently misrepresented is a bigger one — because the person reading it does not know it is wrong.
What passed
An audit that reports only the red is useless; it has to measure what works too, or you cannot tell which part of the job is done.
What passed here:
- Seventeen bot user-agents were tested separately — Googlebot, bingbot, GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot and the rest. All returned
200, all received the identical 87,890 bytes. No cloaking, no WAF wall, no bot discrimination. - No JavaScript dependency. Raw HTML 337 words, 315 after rendering. A difference of minus six percent. The problem described as GEO's "number one killer" — content existing only after JS runs — is not present here.
- hreflang reciprocal in 64 of 64 directions. Every mutual link across eight languages is intact. This is the thing that breaks most often on multilingual sites.
- Structured data: zero errors, zero warnings from the official validator.
- Zero promotional tone. A scan for fourteen superlatives was run: "best", "leading", "pioneering", "excellent", "industry's"… none present. The text actively does the opposite: "No charge. And no pitch afterwards." Excessive promotional language measurably lowers the odds of being cited; this site is positioned the other way.
That list is not the most reassuring part of the report — it is the most useful. It proves the reason for zero visibility is not technical.
Finding what it was not looking for
The most interesting outputs of an audit are the ones not on its checklist.
This one found two silent failures in generator code. The first: the freshness stamp in the sitemap was reading its own output, so the date would never have advanced. The second: the list of translatable fields in the structured data was duplicated in two places; add a new field to only one, and Turkish text would be copied silently into seven languages.
Both share a property: no test was failing. A hundred tests were green and both were sitting there.
My own mistake
The report had written one finding too broadly: it said the main content region was not marked up. I had measured with querySelectorAll('main'), and that does not see a landmark marked with an ARIA role. Looking at the source, role="main" was already there.
The report was corrected, the dimension score went from 78 to 85, the SEO score from 49 to 50. The correction sits inside the report in plain sight — what was measured wrongly, and why.
The value of an audit is not in the faults it finds but in whether it records its own. A finding quietly corrected is less trustworthy than one never found.
What could not be measured
The report has a separate table holding twelve items: Google could not be queried directly because it served a bot-verification page and solving a CAPTCHA is off limits. ChatGPT and Gemini were never tested because they require a login. There is no paid backlink tool, so the referring-domain count is sample-based. There is no field performance data because the site is new.
None of it entered the score. In an audit the easiest lie is giving an estimated number to something you did not measure.
Phase 8 ran five queries instead of eight. The reason is written into the report: the first five returned a unanimous zero across three engines, and further queries were not expected to change that unanimity. It is a scope limitation, and it was not presented as eight out of eight.
What came of it
The action plan the audit produced has no P0 — and that is a finding. P0 is defined as "blocks indexing or AI access". Nothing on this site blocks anything: robots.txt is fully open, seventeen bots pass cleanly, there is no JS dependency, no WAF wall. The cause of zero visibility is not an obstacle, it is age.
An invented P0 would have made the rest of the report suspect too.
What remains is interestingly plain: the technical ground is no longer an obstacle, so all the next gains will come from content volume and outside mentions. The section you are reading — the place this piece lives — is the direct consequence of that decision.
The competitive comparison confirmed the reading once more. Of four sites measured on the same criteria, one held sixteen records in the training corpus with 238 words and zero structured data. This site, whose structured data is the best of the four, held zero. On-page perfection alone does not produce corpus presence; age and mentions do.
The most useful output of the audit was not a list but an ordering: which gap closes on its own over time, and which does not. The zero across five indexes closes. Zero outside mentions does not. The shadow of seven namesakes does not — it can only be managed by adding a signal that separates you.
Measuring was the easy part. Changing what was measured comes next.