Skip to content
All articles

SEO and GEO together: a practical audit in 6 steps

Most audits I see are either a 200-page SEO export nobody reads or a slide that says 'be visible in ChatGPT'. Neither changes anything. This is the audit I actually run: six steps, the same order every time, from 'can machines reach you at all' to 'are you cited, and is it getting better'. Each step ends with a short list of fixes, ranked by impact.

11 min read

1. Access: can search engines and AI crawlers reach you?

Everything else is wasted if this step fails, and it fails more often than you would think. Read robots.txt line by line and write down, per crawler, what you allow: Googlebot for Search (which also feeds AI Overviews and AI Mode), OAI-SearchBot for ChatGPT search, PerplexityBot for Perplexity, Bingbot for Bing and the assistants built on it. Then check what robots.txt does not show: CDN and firewall bot rules, rate limits and geo-blocking regularly return 403 to exactly these crawlers while every browser sees a normal site. In Google Search Console, open the page indexing report and the sitemaps report: are your important templates indexed, and if not, why? Check canonical tags on paginated and filtered pages, and make sure key content is in the HTML or reliably rendered, not only loaded after a click. On a large site, crawl a sample of every template instead of every URL; a template bug is one fix for thousands of pages. Finally, look at Bing: Bing Webmaster Tools shows how Bingbot sees your site, and several assistants build on Bing's index, so a site that is weak in Bing starts at a disadvantage there too. Write every blocker into the backlog with the affected template and how many pages it touches.

bash
# Does each crawler get the same answer as a browser?
# (A firewall may also check IP ranges; this catches user-agent rules.)
URL="https://www.example.com/"
for UA in "Mozilla/5.0" "Googlebot" "OAI-SearchBot" "PerplexityBot" "bingbot"; do
  CODE=$(curl -s -o /dev/null -w "%{http_code}" -A "$UA" "$URL")
  echo "$CODE  $UA"
done

Tip from practice

Test with the crawler's user agent from outside your network. A 200 for your browser and a 403 for OAI-SearchBot is the most common silent GEO killer I find.

The audit in one view: each step, the tools it uses and the artefact it produces, from crawlability to a monthly backlog of experiments.
The six audit steps with their tools and outputs

2. Speed and page experience

Google lists a good page experience among the basics for its AI features too, and slow pages lose people long before any algorithm judges them. Measure the Core Web Vitals on real-user data, not only in a lab test: Largest Contentful Paint should happen within 2.5 seconds, Interaction to Next Paint should stay under 200 milliseconds, and Cumulative Layout Shift under 0.1. Search Console groups URLs by template in its Core Web Vitals report, which tells you which page type to fix first. The usual culprits are always the same: oversized hero images, render-blocking third-party scripts and fonts, layout jumps from late-loading banners, and heavy JavaScript on pages that are mostly text. On this website, self-hosting the font and splitting the JavaScript per page cut the mobile first paint from about 3 seconds to under 1 second, with no visual change. Fix the template, re-measure after 28 days of field data, and only then move on.

3. Structured data and entity facts

Next I check whether machines can read who you are and what each page offers without guessing. For every template, list the schema.org types it should carry and compare with what it actually ships: Organization or LocalBusiness on the home page, Product with offers on product pages, Article with author and date on the blog, Event for events, BreadcrumbList everywhere. Validate a sample with Google's Rich Results Test and the Schema Markup Validator, and treat warnings as a backlog, not as noise. Then compare the facts in the markup with the visible page and with your listings elsewhere: name, address, phone, opening hours, prices. Contradictions between your site, your Google Business Profile and the big portals are a frequent reason why AI answers skip a business or show outdated details. The fix belongs in the data source, not in five places by hand: generate the markup and the listings from the same record.

Tip from practice

Pick your ten most important queries and look at who the AI answers cite today. If the same portal shows up again and again, fixing your entry there may beat any change on your own site.

4. Content gaps: answer the questions people really ask

Now the content. Start in Search Console: queries with many impressions but few clicks, and long question-style queries, show where people look for you and leave unsatisfied. In Semrush, a keyword and topic gap against two or three real competitors shows what they cover and you don't. Because AI Overviews and AI Mode use query fan-out, think in clusters: the main question plus the follow-ups a careful buyer would ask next, such as price, comparison, alternatives, 'is it right for my case', and 'how does it work in practice'. Each important page should answer its question in the first two sentences, then go deep with concrete numbers, examples and a short FAQ. Merge thin pages that compete for the same intent; Google's guidance is explicit that more pages do not make a site more relevant. And add what only you can say: your own data, your process, your prices, your results. That is what both search engines and AI assistants prefer to cite. For a local business this often means very practical pages: how to get there, parking, accessibility, group bookings, allergies, prices for typical orders. These are exactly the details people put into prompts, and exactly what generic pages leave out.

regex (Search Console)
# Search Console > Performance > Query > Custom (regex):
# question-style queries, often the ones AI assistants answer directly
^(who|what|where|when|why|how|which|can|does|is|are|should)\b

5. Prompt research: what do customers ask AI assistants?

Keywords tell you what people type into a search box; prompts tell you what they ask an assistant, and those are longer, more specific and full of context ('a quiet restaurant for a business dinner near the station that takes reservations for eight'). Semrush's AI Visibility Toolkit includes prompt research and competitor views that show which questions mention you or your competitors on platforms such as ChatGPT and Google AI Mode. Peec AI lets you add your own prompts, tag them by topic, intent or country, and runs each prompt once a day on every AI model you select. For a real picture you need prompts per important page or intent, not ten generic ones. On a European hospitality platform I set this up for around 150 landing pages: prompts were generated per page with a language model, reviewed, and loaded into the tracker. I describe that workflow, with an open model that runs locally, in a separate article. Keep branded and unbranded prompts apart: unbranded ones show whether you are recommended, branded ones whether what the AI says about you is correct.

Tip from practice

Write prompts the way a customer talks to an assistant, with situation and constraints. 'best CRM' tells you nothing; 'CRM for a 12-person agency that already uses Google Workspace' tells you who wins.

Interactive

How ready is your brand for AI answers?

Tick what is already true. What's left is your GEO to-do list, most important first.

0/10 ready

Your next three steps

  1. Brand facts are identical on the site, Google Business Profile, LinkedIn and directories
  2. Key pages answer the main question in the first paragraph
  3. Organization or LocalBusiness structured data on key pages
Get a GEO visibility check
All calculators and checklists

6. Tracking and a backlog of experiments

An audit only matters if it changes numbers. I set up three views and review them monthly. Google Search Console for classic search and, through its generative AI performance report, for Google's AI features. A prompt tracker, Semrush or Peec AI depending on budget and which assistants matter in your market, for visibility, position, sentiment and share of voice against named competitors; Semrush updates prompt tracking daily and its brand performance reports weekly, and its AI Search Site Audit flags technical issues that keep AI bots out. And your analytics with a channel for AI-referred visits. Then every finding from steps 1 to 5 becomes an experiment with a hypothesis, an owner, a metric and a date, ranked by expected impact and effort. On the hospitality platform this produced ten prioritized experiments, run in three phases: an assessment, a workshop where the team chose what to do first, and short sprints. Read the trend over several weeks; AI answers fluctuate, and a single day proves nothing. The report for management fits on one page: visibility and share of voice per intent, AI-referred visits and leads, the three most cited third-party sources, and the experiments that finished, with their result. Anything longer does not get read, and an audit nobody reads does not get a second round.

yaml
# One experiment card per finding; the backlog is a list of these.
id: geo-07
hypothesis: >
  Answer-first openings on the 20 top location pages raise our
  share of voice for "decide" prompts in ChatGPT and AI Mode.
change: Rewrite the first two sentences only; nothing else on the page.
owner: content lead
metric: share of voice, "decide" prompts, location template (Peec AI / Semrush)
baseline: 2026-11-01 to 2026-11-28
check_after: 4 weeks
impact: high
effort: low
status: running

Tip from practice

Change one thing per experiment and write the expected effect down before you start. Otherwise every rise gets explained afterwards, and nobody learns which change worked.

Takeaway

Access first, then quality, then prompts and tracking: in that order, an SEO and GEO audit turns into a short list of fixes you can measure, not a report that gathers dust.

More articles

    Get in touch

    Tell me what you're building. I'll reply within 1–2 business days.

    Dominik Heinrich
    Company
    MADO Consulting

    Available worldwide, remote. On-site on request, depending on the country.

    I reply within 1–2 business days. Free slots: see the calendar

    Opens Calendly's booking calendar here. Loading it sends data to Calendly (see Impressum).