Fix guides

Fix: GEO audit checks — answers, trust and AI crawlers

Fix the GEO audit's answer, trust and AI crawler checks: clear answers, FAQs, authors, dates, sources, robots.txt rules for AI bots, llms.txt and JavaScript content.

Updated Oct 24, 2026

The GEO (generative engine optimisation) audit checks whether AI assistants such as ChatGPT, Claude, Perplexity and Google’s AI features can read, understand, trust and quote a page. This guide fixes the checks in the answers, trust and AI crawlers sections. Schema checks are in Fix: structured data and social tags.

Find the affected checks in the app

  1. In Audits, open a GEO audit report (to start one, see Run an audit). The sections are structured data, answers, trust and AI crawlers.
  2. Issues to fix lists every failing check with Critical or Warning, Why it matters and How to fix.
  3. The AI crawlers section shows each AI bot (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot) and whether robots.txt allows it. Fixes: AI crawlers allowed in robots.txt.
  4. To track whether the brand actually appears in AI answers, use AI visibility (see AI visibility).

Clear answer near the top

How we detect it

The audit takes the first paragraph of the main content that has at least 12 words. It passes when that paragraph is 20 to 120 words long and does not start with a greeting (“Welcome”, “Hello”, “Thanks”, “We are”). Critical.

Why it matters

AI search quotes short, direct answers. Pages that open with a welcome message or a wall of text get skipped.

Common causes

  • The page opens with “Welcome to our website” → greeting detected.
  • The first paragraph is a one-line tagline (under 20 words).
  • The intro is one long block (over 120 words).
  • The main content is in a slider or tabs, so the first real paragraph is far down.

Fix: basic

  1. Decide the main question the page answers (for example “How much does a roof repair cost in Springfield?”).
  2. Write a 40 to 60 word paragraph that answers it directly in the first sentence.
  3. Place it straight after the H1, before images, sliders or service boxes.
  4. Move welcome or company text further down.

Fix: expert

<main>
  <h1>Roof repair in Springfield</h1>
  <p>We repair leaking, storm-damaged and worn roofs across Springfield, usually within 3 working days.
     Most repairs are finished in one visit, and every job comes with a written 5-year workmanship guarantee
     and before-and-after photos.</p>
  <!-- details, services, gallery below -->
</main>

Wrap the content in a main (or article) element so the audit and AI tools find the main text, not the menu.

Platform steps

WordPress

  1. In Elementor, add a Text Editor widget directly under the heading widget in the first section. In the block editor, add a Paragraph block under the H1.

Shopify

  1. In the Shopify admin › Online Store › Themes › Customize, add a Rich text section directly below the banner and write the answer there.

Verify the fix

  1. In Audits, open the GEO audit and click Run again. Clear answer near the top should show the word count of the first paragraph.

Automation

Assisted: an answer paragraph can be drafted automatically, but it needs the business’s real facts and approval.

Question-style headings

How we detect it

Counts H2 and H3 headings that end with ”?” or start with a question word (what, how, why, when, where, who, which, can, does, do, is, are, should, will and similar). Passes with 2 or more. Warning.

Why it matters

People ask AI assistants questions. Headings phrased the same way match those questions and make the answer below easy to extract.

Common causes

  • Headings are labels (“Our services”, “Pricing”) instead of questions.

Fix: basic

  1. Rewrite 3 to 5 H2 headings as the questions customers ask, for example “How much does a roof repair cost?”, “How long does it take?”, “Do you offer a guarantee?”.
  2. Answer each one in the first sentence below it.

Fix: expert

<h2>How much does a roof repair cost?</h2>
<p>Small repairs such as replacing a few tiles usually take under two hours …</p>

Platform steps

WordPress

  1. Edit the heading text in the editor; keep the heading level (H2) unchanged.

Verify the fix

  1. Run again: the check shows how many question headings were found.

Automation

Assisted: rewrites can be suggested automatically; content approval is needed.

FAQ section

How we detect it

Passes when the page has FAQPage schema, a heading containing “FAQ”, “Frequently asked”, “Common questions” or “Questions & answers”, or 3 or more details (accordion) elements. Warning.

Why it matters

FAQs are one of the formats AI answers quote most often.

Common causes

  • No FAQ on the page, or FAQs only on a separate FAQ page.
  • An accordion widget without a heading and without details elements.

Fix: basic

  1. Add an H2 called “Frequently asked questions” near the end of the page.
  2. Add 4 to 8 real customer questions with 2 to 4 sentence answers.
  3. Use the Yoast FAQ block (Yoast SEO) or FAQ by Rank Math block (Rank Math) in WordPress; they add FAQPage schema too.

Fix: expert

<h2>Frequently asked questions</h2>
<details><summary>Do you work at weekends?</summary><p>Yes, Saturday mornings for inspections and urgent repairs.</p></details>
<details><summary>Are you insured?</summary><p>Yes, we carry full public liability insurance.</p></details>
<details><summary>Do you remove the old materials?</summary><p>Yes, all waste is removed and recycled where possible.</p></details>

Add FAQPage JSON-LD as shown in Fix: structured data and social tags.

Platform steps

Shopify

  1. In the Shopify admin › Online Store › Themes › Customize: many themes have a Collapsible content section; add it with a heading “Frequently asked questions”.

Wix

  1. In your Wix dashboard, open the editor and add the Wix FAQ app or a Collapsible text element with an FAQ heading.

Verify the fix

  1. Run again: the check shows how many questions were found.

Automation

Assisted: questions can be drafted from the page and Search Console queries; answers need approval.

Lists and tables

How we detect it

Passes when the main content has 2 or more lists with at least 3 items each, or at least one table. Warning.

Why it matters

Lists and tables are easy for AI to extract and cite (steps, prices, comparisons, features).

Common causes

  • All content is in paragraphs.
  • Lists are built from styled divs or images rather than real list elements.

Fix: basic

  1. Turn steps, features, service areas and “what’s included” into bulleted or numbered lists.
  2. Put comparisons or price ranges in a table (Table block in WordPress).

Fix: expert

<h2>What's included</h2>
<ul>
  <li>Full roof inspection with photos</li>
  <li>Written quote within 24 hours</li>
  <li>5-year workmanship guarantee</li>
</ul>

Platform steps

WordPress

  1. Elementor’s Icon List widget outputs a real ul list; prefer it over separate text widgets.

Verify the fix

  1. Run again: the check shows the number of lists and tables.

Automation

Assisted: content restructuring needs approval.

Author name and bio

How we detect it

Looks for an author in Article or Person schema, then a meta name="author" tag, then elements such as .author, .byline or rel="author", then “Written by / Posted by Name” in the text. Also notes whether there’s a bio or author page link. Critical.

Why it matters

Experience and expertise signals (E-E-A-T) help Google and AI decide whom to trust (Google: creating helpful, reliable content).

Common causes

  • Author boxes are switched off in the theme.
  • Service pages have no author at all.
  • The author name is “admin”.

Fix: basic

  1. In your WordPress admin, open Users › Profile (/wp-admin/profile.php), set a real name in Display name publicly as and fill Biographical Info.
  2. Switch on the theme’s author box (often under Appearance › Customize › Blog / Single Post › Author box).
  3. On service pages, add a short “Reviewed by Jane Smith, head roofer” line with a link to a team page.
  4. Create a team or author page with photo, role, experience and qualifications.

Fix: expert

<p class="byline">By <a rel="author" href="/team/jane-smith/">Jane Smith</a>, head roofer with 15 years' experience</p>
<meta name="author" content="Jane Smith">

Add author to Article schema (see Fix: structured data and social tags).

Platform steps

Shopify

  1. Blog articles show the author when the theme setting Show author is on (Shopify admin › Online Store › Themes › Customize › Blog posts template). Set staff names under Shopify admin › Settings › Users and permissions.

Verify the fix

  1. Run again: the check shows the author name found and whether a bio was detected.

Automation

Assisted: settings are automatable with WordPress admin access; author details must come from the client.

Contact and about pages

How we detect it

Counts three trust signals: contact details on the page (a tel: or mailto: link, or a street address), a link to an About page (/about, /about-us, /team, /who-we-are, /company) and a link to a Contact page (/contact, /contact-us, /get-in-touch). Passes with 2 or more. Warning.

Why it matters

Clear contact details show a real business stands behind the content.

Common causes

  • No About page, or it’s at an unusual URL (for example /our-story).
  • Contact details only in an image.

Fix: basic

  1. Create About and Contact pages at standard URLs (/about/ and /contact/).
  2. Link both from the main menu or footer of every page.
  3. Show the phone (as a tap-to-call link), email or address as text in the footer.

Fix: expert

<footer>
  <a href="/about/">About us</a> · <a href="/contact/">Contact</a>
  <a href="mailto:[email protected]">[email protected]</a>
  <address>12 Market Street, Springfield, IL 62701</address>
</footer>

Platform steps

WordPress

  1. In your WordPress admin, open Appearance › Menus (/wp-admin/nav-menus.php) or Appearance › Editor › Navigation › add the pages to the footer menu.

Verify the fix

  1. Run again: the check lists which signals are still missing.

Automation

Automatable with WordPress admin access (menus and pages); the content needs the client’s details.

Freshness date

How we detect it

Looks for dates in schema (datePublished, dateModified), article:modified_time / article:published_time / og:updated_time meta tags, time elements and text like “Last updated October 10, 2026”. Passes when the newest date is within the last 365 days. Warning.

Why it matters

AI search prefers fresh, dated information.

Common causes

  • No date shown or marked up.
  • The page was never updated in over a year.
  • The theme hides dates.

Fix: basic

  1. Review and update the page content (facts, prices, examples), then show “Last updated” with the date near the title.
  2. Yoast and Rank Math set dateModified automatically when you update the post.
  3. Turn on the theme’s “Show updated date” option if it has one.

Fix: expert

<p>Last updated <time datetime="2026-10-10">October 10, 2026</time></p>
<meta property="article:modified_time" content="2026-10-10T09:00:00+00:00">

Only change the date when the content really changed.

Platform steps

Webflow

  1. From the Webflow dashboard, open the site, add a CMS field “Updated” to the collection and bind a text element to it on the template.

Verify the fix

  1. Run again: the check shows the newest date found.

Automation

Assisted: the date markup is automatable; real content updates need a person.

Sources and citations

How we detect it

Counts links in the main content to other websites (social networks excluded). Passes with 2 or more different outside sources. Notes authoritative ones (.gov, .edu, Wikipedia, WHO, NIH and similar). Warning.

Why it matters

Cited facts are more likely to be repeated by AI assistants.

Common causes

  • Statistics and claims with no links.
  • Outside links only in the footer (social icons) rather than the content.

Fix: basic

  1. Find each statistic, regulation or claim on the page.
  2. Link it to the original source (official site, study, manufacturer documentation) with descriptive anchor text.

Fix: expert

<p>Building rules require a permit for full roof replacements
   (<a href="https://www.example.gov/building-permits">city building permit guide</a>).</p>

Platform steps

WordPress

  1. Select the text in the editor, press Ctrl+K and paste the source URL.

Verify the fix

  1. Run again: the check shows how many outside sources are linked.

Automation

Assisted: sources must be chosen by a person.

Reviews and testimonials

How we detect it

Passes when the page has AggregateRating or Review schema, or text such as “testimonial”, “what our customers say”, “reviews”, or star characters. Warning.

Why it matters

Social proof is a trust signal for people and machines.

Common causes

  • Reviews only on Google, not on the site.
  • Reviews embedded in an iframe widget with no text on the page.

Fix: basic

  1. Add a “What our customers say” section with 2 to 3 recent reviews (name, short quote).
  2. Link to the Google reviews (copy the review link from your Google Business Profile).
  3. Add rating markup (see Fix: structured data and social tags).

Fix: expert

<section>
  <h2>What our customers say</h2>
  <blockquote><p>"Fixed our leak the same day."</p><cite>Sam P., Springfield</cite></blockquote>
</section>

Platform steps

Shopify

  1. Add a Testimonials section in Shopify admin › Online Store › Themes › Customize, or a reviews app block on product pages.

Verify the fix

  1. Run again.

Automation

Assisted: reviews must be real and approved by the client.

AI crawlers allowed in robots.txt

How we detect it

The audit reads robots.txt and tests the page URL for GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended and CCBot. It fails (Critical) when any of the four key bots (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) is blocked. No robots.txt means everything is allowed. Each bot is documented by its owner: OpenAI crawlers (GPTBot, OAI-SearchBot), Perplexity crawlers, Google crawlers (Google-Extended).

Why it matters

If AI crawlers can’t read the site, it can’t appear in AI answers based on that content.

Common causes

  • robots.txt has Disallow: / groups for AI bots (added by an SEO plugin option or a copied template).
  • Cloudflare’s managed robots.txt or “Block AI bots” setting adds blocks (Cloudflare can prepend AI blocking rules to robots.txt).
  • A blanket User-agent: * / Disallow: /.

Fix: basic

  1. Open /robots.txt and look for groups naming GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot or OAI-SearchBot with Disallow: /.
  2. Remove those groups, or change them to Allow: /, in your robots.txt editor (Yoast Tools › File editor, /wp-admin/admin.php?page=wpseo_tools&tool=file-editor; Rank Math General Settings › Edit robots.txt, Shopify robots.txt.liquid, Webflow Site settings › SEO, Wix Robots.txt Editor).
  3. Cloudflare: in the Cloudflare dashboard, pick your site › Security › Bots (or AI Crawl Control in newer dashboards; Cloudflare bots docs) and switch off Block AI bots / Manage AI bots in robots.txt (named Instruct AI bot traffic with robots.txt in some versions) if you want AI crawlers to read the site. Also check Security › WAF › Custom rules (docs) for rules blocking these user agents. Full steps: Fix: Cloudflare blocking the crawler.

Fix: expert

A robots.txt that allows AI crawlers explicitly:

User-agent: GPTBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Google-Extended
Allow: /

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Sitemap: https://www.example.com/sitemap_index.xml

A bot follows only the most specific group that names it, so a bot with its own group ignores the * rules: repeat private Disallow lines in each group if needed. Syntax reference: Google’s robots.txt guide.

Platform steps

Cloudflare

  1. If robots.txt on the live site differs from the file on the server, Cloudflare’s managed robots.txt is active. Switch it off as above, then purge the cache (Cloudflare dashboard › your site › Caching › Configuration › Purge Everything).

nginx

  1. Check the server doesn’t block these user agents (search the config for GPTBot or ClaudeBot in if ($http_user_agent …) rules) and remove the rule.

Verify the fix

  1. Open /robots.txt in a private window and check the new rules. Google also shows the file it fetched in Search Console › Settings › robots.txt.
  2. In Audits, open the audit and click Run again. The AI crawlers section should show the key bots as allowed.

Automation

Automatable with WordPress admin access via the SEO plugin, a Cloudflare API token, or file access; the allow/block choice must be confirmed by the client.

llms.txt

How we detect it

The audit requests https://yourdomain/llms.txt (and /llms-full.txt). It passes when a plain-text file is returned (not an HTML error page). Warning.

Why it matters

llms.txt gives AI tools a short, clean summary of the site and its key pages. It’s a proposed convention (llmstxt.org), so treat it as a low-cost extra.

Common causes

  • The file doesn’t exist.
  • The CMS answers /llms.txt with an HTML 404 page.

Fix: basic

  1. Write the file using the template below.
  2. WordPress: upload it as llms.txt to the web root with cPanel › File Manager › public_html (in hPanel: Files › File Manager; Plesk: Files, see Plesk docs), or use an llms.txt plugin (Yoast and Rank Math have llms.txt options in recent versions: check Yoast SEO › Settings › Site features › llms.txt or Rank Math › General Settings › LLMS Txt).
  3. Shopify: you can’t upload to the root directly; create a page template that outputs plain text, or add a URL redirect from /llms.txt to a file in Shopify admin › Content › Files (redirects work for missing paths).
  4. Webflow and Wix: host the text in a file and add a 301 redirect from /llms.txt to it, if the platform has no root upload.

Fix: expert

# Example Roofing Ltd

> Family-run roofing company in Springfield, IL. Roof repairs, replacements, inspections and gutter work for homes and small businesses since 2009.

## Key pages
- [Roof repair](https://www.example.com/roof-repair/): leaks, storm damage and tile replacement
- [Roof replacement](https://www.example.com/roof-replacement/): materials, process and guarantees
- [Service areas](https://www.example.com/areas/): towns we cover
- [Contact](https://www.example.com/contact/): address, opening hours and quote form

Serve it as text/plain or text/markdown with UTF-8.

Platform steps

nginx

location = /llms.txt {
    default_type text/plain;
    charset utf-8;
}

Verify the fix

  1. Open /llms.txt in the browser: plain text, not an HTML page.
  2. Run again. llms.txt should pass.

Automation

Automatable with WordPress admin access via the SEO plugin or file access (SFTP or hosting panel).

Content without JavaScript

How we detect it

The audit compares the words in the main content of the raw HTML (as the server sends it) with the rendered page in Chrome. When the rendered page has at least 80 words and the raw HTML has less than 60% of them, the check fails. Warning.

Why it matters

Many AI crawlers don’t run JavaScript, so they see an empty or half-empty page.

Common causes

  • Single-page apps (React, Vue, Angular) that render everything in the browser.
  • Page builders or widgets that load text by JavaScript (tabs, sliders, “load more”).
  • Content fetched from an API after the page loads.

Fix: basic

  1. Check: open the page, press Ctrl+U and search for a sentence from the main text. If it’s missing, the content needs JavaScript.
  2. On WordPress, replace JavaScript-loaded widgets with normal blocks; turn off “lazy load content” / AJAX loading options for the main content.
  3. Website builders (Wix, Squarespace, Webflow, Shopify) render text on the server already; check third-party widgets embedding the main text.

Fix: expert

  1. Use server-side rendering or static generation: Next.js (App Router renders on the server by default), Nuxt (ssr: true), Astro, SvelteKit, Angular SSR.
  2. For an existing client-only app you can’t migrate yet, pre-render the main routes at build time (for example vite-plugin-prerender or a pre-rendering service) and serve the HTML to all visitors.
  3. Keep important text in the initial HTML; load only enhancements with JavaScript.
<!-- Bad: empty shell -->
<div id="root"></div>
<script src="/app.js"></script>

<!-- Good: content in the HTML, JavaScript enhances it -->
<div id="root"><h1>Roof repair in Springfield</h1><p>We repair leaking …</p></div>
<script src="/app.js" defer></script>

Platform steps

WordPress

  1. Elementor tabs and accordions output their text in the HTML; “Load more” and AJAX filters don’t. Show key content without them.

Verify the fix

  1. View the source again and find the main text.
  2. Run again. Content without JavaScript should show most words in the HTML.
  3. For a site crawl, links that exist only after JavaScript need Render JavaScript (see Fix: Crawl finds few pages).

Automation

Manual: rendering changes are development work.

Common questions

Should my client allow AI crawlers?

If the goal is to be mentioned and linked in ChatGPT, Claude, Perplexity and Gemini answers, yes: blocked crawlers can't read the site. Some publishers block training crawlers on purpose. It's a business decision; the audit flags the block so the decision is deliberate.

Does blocking Google-Extended affect Google Search rankings?

No. Google-Extended only controls whether Google may use the content for Gemini and AI training. Googlebot, which crawls for Search (including AI Overviews), is a separate user agent.

Is llms.txt an official standard?

No, it is a proposed convention, and not all AI tools read it. It's cheap to add and harmless, which is why the audit treats a missing file as a Warning, not Critical.

Which checks matter most?

The Critical ones: Clear answer near the top, Author name and bio, AI crawlers allowed in robots.txt and Organization schema. Fix those first, then the Warnings.

Still need help?

Ask in the chat inside the app, or send us a message on the contact page. You can also browse all help topics.