Skip to content

Sample report

Sample SEO audit report: our own website, audited 7 times

These are the real reports from auditing our own website: 9 pages, 7 rounds, 63 reports, 84 checks each. In the first round no page earned an A. Below is the full first-round report for our homepage (grade C, 74.2/100), then how every page's grade changed as we fixed what the audit found.

The report is shown as the audit produced it. The only edits are the three listed at the end of the report.

Automated 84-check scan; critical findings reviewed by Rich Benjamin, founder of RBA Marketing and Media. Questions: info@rbamarketing.com

Last updated

First-round Brutally Honest scorecard for our homepage: grade C, 74.2/100 across nine areas
Our homepage's first-round scorecard.

The full report

SEO + GEO Audit: Brutally Honest Website Reviews — Free SEO & AI-Search Audit

URL: https://brutallyhonest.rbamarketing.com/ | Audited: 2026-09-25 | Target query: free SEO and AI search audit / brutally honest website review (inferred from title, meta description and body)

Sample report. A real Brutally Honest audit of our own website, from our first audit round (September 2026). Nothing is redacted, and the page grades, scores and findings are exactly what the audit produced. We only removed notes that compared it with an earlier test run and corrected a few category letter grades that didn't match the published grade scale.

Grade: C (74.2/100) — Confidence: High

The canonical points at the live domain, so no F- cap applies. The page holds the grade its content earns, and that content is the problem. The body never uses the words "SEO" or "AI search", and it shows no real audit data or named expert behind "Your website probably deserves a D." Put the topic into the H1 and opening paragraph, then publish real numbers from the audits you have already run.

The rendered-DOM, raw-vs-rendered and crawler-UA checks confirm 0.0% of main content is missing from raw HTML and every bot gets identical content. They also turned up two mobile and accessibility defects: the primary URL field collapses to 23 px tall on phones, and the second form's input has no label because of duplicate IDs. No hard cap applies. The two open CRITICAL checks (4.1 intent match, 4.2 non-commodity) are narrow WARNs, not FAILs. They would cap the grade at B-, which is above the current score.

🚨 Critical Blockers

None found that block indexing or citation. The canonical, og:url, robots.txt Sitemap: line and sitemap <loc> entries all use https://brutallyhonest.rbamarketing.com/. Two CRITICAL-severity content checks are unresolved at WARN level:

  1. 4.1 Intent match (WARN). Results for "free SEO audit" are instant, no-email tools. This page is a request form: "It takes a few days to schedule your job. Typical turnaround is less than 72 hours." The format fits "honest / human website review" intent, not "free SEO checker".
  2. 4.2 Non-commodity test (WARN, narrow pass). The only original material is methodology: the 9-area weighting table and the hard-caps table. The sample card is a CSS mock-up ([business name redacted], D+, Score 41/100). The headline claim "Your website probably deserves a D." has no data behind it.

Scorecard

Category Weight Score Grade Worst issue
1. Indexability & Crawl Access 15 15.0 A+ None scored. The robots.txt comment mislabels OAI-SearchBot as a training crawler; sitemap has no <lastmod>
2. Title, Meta & Head 15 13.2 B+ Brand leads the title; "SEO" doesn't appear until character 34; no favicon (/favicon.ico 404)
3. Headings & Semantic HTML 10 8.4 B H1 "Your website probably deserves a D." never says what the service is
4. Content Quality & E-E-A-T 20 12.3 D- Zero outbound sources; no named person; no original data
5. GEO / AI Citability 15 6.9 F No sourced stats, quotes or citations; "SEO" appears 0 times in 1,865 words of main content
6. Structured Data 7 5.4 C+ No WebSite node; Organization has no logo, sameAs or @id
7. Open Graph & Social 5 3.7 C No og:site_name/og:locale; 2,527,439-byte og:image at 1.78:1
8. Performance & Mobile 8 5.5 D+ Primary URL input renders 23 px tall on mobile; lab LCP 3.2 s (lab only)
9. Images, Links & Accessibility 5 3.8 C Duplicate id="page-url" leaves the second form input unlabelled; red accent text at 3.5:1 contrast
Total 100 74.2 C Commodity-looking content without evidence, author or topic words

Top 10 Fixes (ranked by impact ÷ effort)

# Fix Category Impact Confidence Effort
1 Verify the subdomain in Google Search Console and Bing Webmaster Tools, submit /sitemap.xml, request indexing of / and push all 9 URLs via IndexNow Indexability Prerequisite for any measurable traffic. Size can't be estimated: indexing status and baseline are unknown High S
2 Put the words people search into the H1 and opening paragraph: "SEO", "AI search", "website audit". Today they appear 0, 0 and 0 times respectively in main content ("audit" alone appears 18 times) Content / Headings +10–30% non-branded impressions once indexed (Google organic, AI features) Medium S
3 Publish original data from the audits you have already run, e.g. "We graded N pages: median grade D, X% failed the raw-HTML check." Add a real (redacted) report screenshot Content / GEO +15–40% over 3–6 months. It is the only non-commodity, linkable and citable asset available Medium M–L
4 Add a named human: who runs the audits, credentials, years in SEO, photo, link to /about E-E-A-T +5–10%: trust, conversions and citation eligibility Medium S
5 Link the factual claims to their sources: AI crawlers don't run JavaScript, Google ignores llms.txt, FAQ/HowTo rich results retired GEO +5–15% AI-citation likelihood (ChatGPT, Perplexity, Copilot) Low S
6 Use one brand name everywhere ("Brutal Honest Website Report" tier, "RBA Marketing" footer, "RBA Marketing and Media" JSON-LD). Add WebSite + one @id'd Organization with logo and sameAs GEO / Schema +3–8% entity recognition in AI answers Low S
7 Add a "How is this different from instant SEO checkers?" section and aim at the intent you can win: human-reviewed, evidence-quoting audits Content / Intent +5–15% on comparison and "honest website review" queries Medium M
8 Fix the conversion path. Stop the mobile URL input collapsing to 23 px (flex-1 → sm:flex-1). Give each form unique IDs so both inputs have labels. Point the three /request-report links at the final URL. Relabel "Schedule Your Scan" (×2 → /pricing) Links / UX / Mobile +5–10% form conversions on mobile; cleaner crawl Medium S
9 Social and head cleanup: add a favicon, og:site_name, og:locale and og:image:width/height/alt; re-export the og:image at 1200×630, under 300 KB Social / Head +2–5% social CTR; favicon in Google results Medium S
10 Self-host the fonts, cut them to the weights actually used and preload the H1 font. Target lab LCP under 2.5 s (now 3.2 s) Performance +0–5% (tie-breaker only) Low M

Path to +50%

Baseline first. No Search Console or analytics data was supplied, and indexing of the subdomain is NOT VERIFIED. A correct canonical produces no traffic until Google and Bing crawl and index the URL, typically within 2–4 weeks of submission. Until then, +50% of close to zero is still close to zero.

Midpoint math, measured against the post-indexing baseline:

  • Fix 2 (topic words in H1 and opening): ~+20%
  • Fix 3 (original data, real report screenshot): ~+25% (3–6 months)
  • Fixes 4 + 5 (named expert, cited sources): ~+10%
  • Fix 7 (differentiation section): ~+10%
  • Fixes 6, 8, 9, 10 combined: ~+7%
  • Sum of midpoints: ~+72%. Discount it heavily. The effects overlap, and "free SEO audit" is dominated by instant tools on established domains. A new subdomain won't outrank them on page quality alone.

Honest verdict: on-page work alone will not credibly deliver +50% on non-branded queries. It also needs:

  1. Fix 1 this week.
  2. Outside links and mentions: a contextual link from www.rbamarketing.com to the subdomain, a data-led write-up of the grade distribution pitched to SEO publications, and YouTube walkthroughs of real, permissioned audits on @rbamarketing.
  3. Targeting the intent this page can win: "honest website review", "human SEO audit", "AI search visibility audit for small business", "why can't ChatGPT see my website".

Realistic timeline: indexed in 2–4 weeks; measurable non-branded traffic in 3–6 months, if fix 3 and the off-page work happen.

Detailed Findings

1. Indexability & Crawl Access — 15.0/15

  • 1.6: the canonical is <link rel="canonical" href="https://brutallyhonest.rbamarketing.com/"/>: one tag, absolute, self-referencing, returns 200. 1.8: robots.txt declares Sitemap: https://brutallyhonest.rbamarketing.com/sitemap.xml (200), which lists <loc>https://brutallyhonest.rbamarketing.com/</loc> and the 8 other pages on the same host.
  • Advisory (not scored): the sample grade card is in the raw HTML twice, once inside relative hidden lg:block (desktop) and once inside lg:hidden (mobile). Browsers show one copy, but AI crawlers reading raw HTML get the "[business name redacted] D+ 41/100" block twice, and the two forms are duplicated as well. The text is the same in both copies, so this is not cloaking. Render one copy and reposition it with CSS.
  • Advisory (not scored): the sitemap has no <lastmod> and carries <priority> values, which Google ignores. Add real modification dates:
    <url><loc>https://brutallyhonest.rbamarketing.com/</loc><lastmod>2026-09-25</lastmod></url>
  • Advisory (not scored): the robots.txt comment reads Training crawlers (e.g. Google-Extended, OAI-SearchBot's training role, ClaudeBot). That's wrong: OAI-SearchBot is OpenAI's search crawler and GPTBot is its training crawler. On a site that sells exactly this distinction, the error damages credibility. Replace it with Training crawlers (e.g. GPTBot, ClaudeBot, Google-Extended). The file also has two User-agent: * groups (Allow: / and Disallow: /thanks). Google merges them, but a single group is clearer:
    User-agent: *
    Disallow: /thanks
  • Passed: 1.1 (200, no redirect; http:// → 301 → https://), 1.2 (no noindex in meta or headers), 1.3, 1.4 (every search and training bot Allow: /), 1.5 (measured: 0.0% of main content missing from raw HTML (576 unique words raw, 576 rendered); title, canonical, meta description, 1 JSON-LD block, 7 OG/Twitter tags, the H1, all 20 headings and all 25 unique hrefs are identical in raw and rendered HTML), 1.6, 1.7 (no nosnippet), 1.8, 1.10 (HTTPS; the rendered load made 12 requests, all https://, with zero console errors), 1.11 (identical 58,613-byte raw responses and identical 56,904-byte rendered DOMs, each with 0.0% missing, for Googlebot, Bingbot, GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot and PerplexityBot; ChatGPT-User also got 200). 1.9 N/A.

2. Title, Meta Tags & Head Basics — 13.2/15

  • [HIGH] 2.2 Title length/placement — WARN
    • Found: <title>Brutally Honest Website Reviews — Free SEO &amp; AI-Search Audit</title> (60 chars). The brand takes the first 31 characters, and "SEO" doesn't appear until character 34.
    • Why it matters: nobody searches the brand yet. The query-bearing half is the part most likely to be truncated or rewritten.
    • Fix: <title>Free SEO &amp; AI Search Audit, Graded A+ to F- | Brutally Honest</title>
  • [LOW] 2.8 Favicon — FAIL
    • Found: no <link rel="icon"> in the head; /favicon.ico and /favicon.svg both return 404.
    • Fix: <link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="icon" href="/favicon.ico" sizes="48x48"> (square icon, 48×48 or larger).
  • Passed: 2.1, 2.3, 2.4 (150 chars, page-specific), 2.5 (lang="en"), 2.6, 2.7 (one canonical, no HTTP Link: canonical). 2.9 N/A (no meta keywords). 2.10 N/A (homepage).

3. Heading Structure & Semantic HTML — 8.4/10

  • [HIGH] 3.2 H1 describes the topic — WARN
    • Found: H1: Your website probably deserves a D. We'll tell you exactly why.
    • Why it matters: a strong hook, but it contains none of "SEO", "audit" or "AI search". The H1 is the strongest on-page topic label.
    • Fix: <h1>Your website probably deserves a D. <span>A free, brutally honest SEO and AI-search audit shows you why.</span></h1>
  • [HIGH] 3.7 Descriptive H2s — WARN
    • Found: 84 checks. Nine areas. Weighted on purpose. / Roughly half of the auditor's instructions are restrictions. / One page. One grade. No sales call. These are clever, but a reader skimming only the headings can't tell what each section answers.
    • Fix: see the H2 outline in Rewrites.
  • Passed: 3.1, 3.3, 3.4, 3.5, 3.6, 3.8 (<header>, <nav aria-label="Primary">, <main id="main">, <footer>, skip link), 3.9 (real <table> and <ul>).

4. Content Quality, Helpfulness & E-E-A-T — 12.3/20

  • [CRITICAL] 4.1 Intent match — WARN
    • Found: the page is a request form with a report delivered later ("Typical turnaround is less than 72 hours"). Searchers typing "free SEO audit" get instant, no-email tools.
    • Fix: target "honest website review", "human SEO audit" and "AI search visibility audit". Say plainly why a human-checked report is worth the wait (fix 7).
  • [CRITICAL] 4.2 Non-commodity test — WARN (narrow pass; no C cap applied)
    • Found: the weighting and hard-cap tables are original. Everything else is claims without evidence. The sample card is CSS ([business name redacted] D+ Score 41/100 Product grid invisible to AI), and there are no audit counts or grade distribution.
    • Fix: <p>Of the <strong>N</strong> pages we graded between [month] and [month] 2026, the median grade was <strong>D</strong>; <strong>X%</strong> were missing main content from raw HTML.</p>. Use only real numbers.
  • [HIGH] 4.3 Answer-first — WARN
    • Found: An automated audit of 84 checks, scored out of 100, graded A+ to F-. It never says what gets audited.
    • Fix: use the opening paragraph in Rewrites.
  • [HIGH] 4.4 Depth — WARN
    • Missing: who it's for, which AI engines are tested, how it differs from instant checkers, and paid-tier prices (both paid tiers say "Contact for Quote"). There is also no real before/after example.
  • [HIGH] 4.5 Author & accountability — WARN
    • Found: the footer has NAP ("RBA Marketing | 1002 Boardly Hills | Sevierville, TN 37876 | (865) 328-7990") and an /about link. No named person appears anywhere on the page.
    • Fix: add a "Who grades your page" block with name, role, years of experience, photo and a link to /about.
  • [MEDIUM] 4.6 Dates — WARN
    • Found: no <time> element and no visible date. "2026" does not appear in main content.
    • Fix: <p>Last updated <time datetime="2026-09-25">September 25, 2026</time></p>
  • [HIGH] 4.7 Sources — FAIL
    • Found: 0 outbound links in <main>. The only external links are the footer's Facebook, Instagram, YouTube and rbamarketing.com. Unsourced claims include "The crawlers behind ChatGPT, Claude and Perplexity read the page as it first arrives and move straight on", "special 'AI instruction files' that Google openly ignores" and "two types of search markup that Google retired".
    • Fix: link each claim to its source: Vercel/MERJ AI-crawler study, Google Search Central AI-features guidance, and Google's FAQ/HowTo deprecation notices.
  • [MEDIUM] 4.11 Supporting media — WARN
    • Found: the only <img> is the footer logo. The "What Google sees / What ChatGPT sees" panels and the grade card are CSS mock-ups.
    • Fix: add a real, redacted report screenshot and a real raw-vs-rendered comparison image, each with descriptive alt text.
  • Passed: 4.8, 4.9 (blunt, not hype), 4.10, 4.12 (no interstitial markup; lab CLS 0).

5. GEO / AI Search Citability — 6.9/15

  • [HIGH] 5.1 Statistics density — FAIL
    • Found: every number describes the method ("84 checks", "20 points", "less than 72 hours"). None is a sourced or original statistic.
  • [MEDIUM] 5.2 Quotations — FAIL
    • Found: no attributed quotes or testimonials. Fix: add 2–3 named client quotes, with permission.
  • [HIGH] 5.3 Citations — FAIL. Same evidence as 4.7.
  • [HIGH] 5.4 Extractable passages — WARN
    • Found: H3s like It cannot make things up. and It cannot promise you traffic. start with "It" and only make sense in context.
    • Fix: "The audit cannot make things up: anything it couldn't measure is marked NOT VERIFIED."
  • [MEDIUM] 5.6 Entity clarity — FAIL
    • Found: "Brutally Honest" appears 0 times in main content. The tier heading says Brutal Honest Website Report, the og:image artwork reads "Brutally Honest Website Report", the footer says "RBA Marketing" and the JSON-LD says "RBA Marketing and Media".
    • Fix: one product name ("Brutally Honest Website Reviews") and one company name ("RBA Marketing and Media"), used everywhere.
  • [MEDIUM] 5.8 Freshness signals — FAIL
    • Found: no visible date and no dateModified. Fix: 4.6 plus "dateModified":"2026-09-25" on a WebPage node.
  • [MEDIUM] 5.11 Internal linking — WARN
    • Found: the section "Google waits for your page to load. ChatGPT doesn't." has no link to /ai-search (200), the page on exactly that topic.
    • Fix: <a href="/ai-search">why AI crawlers miss JavaScript content</a> inside that section.
  • Passed: 5.5, 5.7 (tables), 5.9, 5.10. The off-screen Leave this empty field is a standard form honeypot, not text aimed at LLMs.
  • 5.12 Advisory: the site has no visible third-party footprint yet. It needs authentic outside mentions: YouTube walkthroughs on @rbamarketing, data posts in SEO publications and client write-ups.

6. Structured Data — 5.4/7

  • [MEDIUM] 6.3 Primary type — WARN
    • Found: Service + Offer "price":"0" fits the page. But Organization and LocalBusiness are two separate nodes with the same name, no @id, and LocalBusiness has no url.
  • [MEDIUM] 6.4 Organization + WebSite — FAIL
    • Found: no WebSite node. Organization has no logo and no sameAs, although the footer links to https://www.facebook.com/rbamarketing, https://www.instagram.com/rbamarketing and https://www.youtube.com/@rbamarketing.
    • Fix (replaces the Organization and LocalBusiness nodes; keep the existing FAQPage node):
      {"@context":"https://schema.org","@graph":[
       {"@type":"LocalBusiness","@id":"https://www.rbamarketing.com/#org","name":"RBA Marketing and Media","url":"https://www.rbamarketing.com","logo":"<URL of a logo readable on white>","telephone":"+1-865-328-7990","address":{"@type":"PostalAddress","streetAddress":"1002 Boardly Hills","addressLocality":"Sevierville","addressRegion":"TN","postalCode":"37876","addressCountry":"US"},"sameAs":["https://www.facebook.com/rbamarketing","https://www.instagram.com/rbamarketing","https://www.youtube.com/@rbamarketing"]},
       {"@type":"WebSite","@id":"https://brutallyhonest.rbamarketing.com/#website","name":"Brutally Honest Website Reviews","url":"https://brutallyhonest.rbamarketing.com/","publisher":{"@id":"https://www.rbamarketing.com/#org"}},
       {"@type":"WebPage","@id":"https://brutallyhonest.rbamarketing.com/#webpage","url":"https://brutallyhonest.rbamarketing.com/","isPartOf":{"@id":"https://brutallyhonest.rbamarketing.com/#website"},"dateModified":"2026-09-25"},
       {"@type":"Service","name":"Brutally Honest Website Reviews","serviceType":"SEO and AI-search website audit","provider":{"@id":"https://www.rbamarketing.com/#org"},"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"}}
      ]}
  • 6.7 Advisory: the FAQPage markup (3 of the visible questions) matches visible text and does no harm, but it won't earn a Google rich result. Don't expand it.
  • Passed: 6.1, 6.2, 6.6. 6.5 N/A (homepage).

7. Open Graph & Social Sharing — 3.7/5

  • 7.2: <meta property="og:url" content="https://brutallyhonest.rbamarketing.com/"/> matches the canonical.
  • [HIGH] 7.3 og:image — WARN
    • Found: https://assets.cdn.filesafe.space/jr5tnGZ1CNwntuZjbMrl/media/6aae921ade8ed1c29f6ddbfe.png returns 200, image/png, 1672×940 (1.78:1) and 2,527,439 bytes. The artwork says "Brutally Honest Website Report", which is a different product name.
    • Fix: re-export at 1200×630, WebP/JPEG under 300 KB, with the site's real name.
  • [LOW] 7.4 og:image dimensions/alt — FAIL
    • Fix: <meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Brutally Honest Website Reviews: free SEO and AI-search audit graded A+ to F-"/>
  • [MEDIUM] 7.5 og:site_name / og:locale — FAIL
    • Fix: <meta property="og:site_name" content="Brutally Honest Website Reviews"/><meta property="og:locale" content="en_US"/>
  • Passed: 7.1, 7.2, 7.6, 7.7 (summary_large_image; twitter:image set; title and description fall back to OG), 7.9. 7.8 N/A (og:type = website).

8. Performance & Mobile — 5.5/8 (lab only; CrUX has no field data for this URL)

  • [HIGH] 8.7 Mobile usability — WARN
    • Found (Playwright, Pixel 5 at 393 px wide): the layout is responsive, scrollWidth 393 = viewport 393 (no horizontal scroll), no visible text under 12 px, and mobile and desktop show the same 1,362 visible words. But the hero URL field, the page's primary conversion control, renders at 361×23 px. The input has class="h-12 flex-1 …". In the mobile flex-direction: column wrapper, flex-1 sets flex-basis: 0%, and that overrides h-12 (48 px). In the screenshot the placeholder https://yoursite.com/the-page-you-care-about touches both borders. That is below the 24 px WCAG 2.2 minimum target size and half the 48 px Google recommends. The footer links are also 16 px tall (What We Check, Pricing, Terms, etc.).
    • Why it matters: most small-business owners will open this page on a phone, and the one field they have to tap is a sliver.
    • Fix: apply flex-1 only from the breakpoint where the wrapper becomes a row, and set a minimum height:
      <input id="page-url-hero" name="pageUrl" type="url" required
        class="h-12 min-h-12 w-full sm:flex-1 rounded-md border-2 …">
      Add py-2 or min-h-6 spacing to the footer links.
  • [HIGH] 8.1 LCP — WARN
    • Found: lab LCP 3.2 s, FCP 3.2 s, Speed Index 4.6 s, TBT 0 ms, performance score 85. LCP equals FCP, so the delay is render-blocking CSS and fonts, not JavaScript.
  • [MEDIUM] 8.6 Render-blocking resources — WARN
    • Found: two blocking stylesheets, /assets/styles-ASJNGGOi.css and https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;600;700;900&family=Roboto+Slab:wght@400;700&family=Permanent+Marker&display=swap. The rendered load then fetched 5 WOFF2 files from fonts.gstatic.com (37,520 + 36,292 + 34,160 + 29,296 + 16,692 bytes = 153,960 bytes of fonts). Total transfer for the initial view is only ~151 KB (the fonts come from cache after the first hit), so page weight is fine and the problem is the cross-origin chain.
    • Fix: self-host the fonts, keep only the weights in use, inline critical CSS, and add <link rel="preload" as="font" type="font/woff2" href="/fonts/roboto-900.woff2" crossorigin>.
  • Passed: 8.3 (lab CLS 0), 8.4 (root document 10 ms in lab). 8.5 N/A (LCP is H1 text). 8.2 INP NOT VERIFIED: it is a field-only metric and CrUX has no data. The lab proxy, TBT 0 ms, suggests low risk.
  • [MEDIUM] 9.4 Anchor text — WARN
    • Found: Schedule Your Scan (×2) → /pricing. The anchor promises scheduling and delivers a price list.
    • Fix: relabel as "See full pricing" or link to /request-report?pageUrl=.
  • [MEDIUM] 9.5 Link status — WARN
    • Found: /request-report (the primary CTA, linked 3 times) returns 307 → https://brutallyhonest.rbamarketing.com/request-report?pageUrl=. None of the other sampled links returned 4xx or 5xx.
  • [LOW] 9.7 Basic accessibility — WARN
    • Found, duplicate IDs: both lead forms use <input id="page-url" …> and <input id="company_website_hp" …> with <label for="page-url" class="sr-only">Page URL to grade</label>. Because the IDs repeat, both labels bind to the first input. In the rendered DOM the second pageUrl input has labels: [], so a screen reader or browser agent sees an unnamed URL field.
    • Found, contrast (computed in the rendered DOM): the red accent oklch(0.53 0.24 27) fails WCAG AA 4.5:1 on small text. Free · one page · no sales call (14 px) is 3.53:1, and the weighting-table point values 20, 15, 10 (16 px) are 3.53:1. The grey captions Page audit, Sample — critical issues only shown, What Google sees and What ChatGPT sees (12 px, oklab(0.34 … / 0.6)) are 3.35–3.54:1. If the page… and The grade cannot exceed (12 px, 70% opacity) are 4.38:1.
    • Fix: give each form instance its own IDs (page-url-hero / page-url-footer, hp-hero / hp-footer) with matching for= values. Darken the red used on text to about oklch(0.45 0.2 27) (or keep the current red for fills only). Raise the caption opacity from /0.6 and /0.7 to at least /0.85.
    • Passed within 9.7: the skip link is the first Tab stop (<a href="#main" class="sr-only focus:not-sr-only …">); there are 0 unnamed buttons; the honeypot sits off-screen at left: -9878px with tabindex="-1".
  • Passed: 9.1 (logo alt="RBA Marketing and Media"), 9.2 (width="220" height="60" loading="lazy"), 9.3, 9.6.

Heading Outline

H1: Your website probably deserves a D. We'll tell you exactly why.
  H2: Google waits for your page to load. ChatGPT doesn't.
  H2: 84 checks. Nine areas. Weighted on purpose.
  H2: Some mistakes are an automatic fail.
  H2: Roughly half of the auditor's instructions are restrictions.
    H3: It cannot make things up.
    H3: It cannot promise you traffic.
    H3: It cannot fudge the numbers.
    H3: It won't sell you popular nonsense.
    H3: It won't touch your customers or your data.
  H2: What lands in your inbox
  H2: What a page audit can't see on its own
    H3: Revenue lands on the wrong page.
    H3: Some sales are invisible.
    H3: Some traffic isn't customers.
  H2: What it costs
    H3: One Page
    H3: Brutal Honest Website Report
    H3: The Full Site Audit
  H2: Questions, answered bluntly
  H2: One page. One grade. No sales call.

(Verified: the rendered-DOM outline from Playwright is identical to the raw-HTML outline, 20 headings, same order and levels.)

Raw HTML vs. Rendered Comparison

  • Main content missing from raw HTML: 0.0% (measured: 576 unique main-content words raw, 576 rendered). PASS, no cap.
  • Raw response: 58,613 bytes. Rendered DOM: 56,904 bytes. The difference is serialization (React self-closing /> vs. browser output), not content.
  • Elements that exist only after JavaScript: none. Title, canonical, meta description, meta robots (none in either), 1 JSON-LD block (byte-identical @graph), 7 OG/Twitter tags, H1 count (1), all 20 headings and all 25 unique href values match exactly.
  • JavaScript on the page (index-CdoXzAC2.js, routes-CN7iDiX3.js, useRouter-Dpb7RwMI.js, lead-form-68HPcB_W.js) only hydrates the forms and navigation. Every crawler that doesn't run JavaScript sees the full page.
  • Main-content word counts: 1,865 words in raw <main>, including the 12 collapsed <details> FAQ answers. 1,362 words are visible in the rendered page with the FAQ closed.

AI Crawler Access Matrix

Bot Purpose robots.txt HTTP response (raw) Rendered DOM Sees main content?
Googlebot Google Search Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
Bingbot Bing / Copilot / ChatGPT search index Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
GPTBot OpenAI training Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
OAI-SearchBot ChatGPT search Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
ChatGPT-User ChatGPT live fetch Allow: / 200 not rendered (no script preset) Yes
ClaudeBot Anthropic training Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
Claude-SearchBot Claude search Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
PerplexityBot Perplexity search Allow: / 200, 58,613 B 56,904 B, 0.0% missing Yes
Google-Extended Gemini training control token Allow: / n/a (robots.txt token only) n/a n/a

Every user agent got a 200, the same byte count and the same canonical, with no redirects or challenge pages. The site is behind Cloudflare (server: cloudflare). How Cloudflare treats requests from real crawler IP ranges is NOT VERIFIED: these were spoofed user-agent strings from a non-crawler IP.

Social Share Preview

+--------------------------------------------------------------+
| [image: 1672x940 PNG, 2.5 MB, 200 OK — "Brutally Honest       |
|  Website Report", flaming shattered monitor]                  |
+--------------------------------------------------------------+
| BRUTALLYHONEST.RBAMARKETING.COM                               |
| Brutally Honest Website Reviews — Free SEO & AI-Search Au...  |
| Free brutally honest website audit: 84 checks scored out of   |
| 100, graded A+ to F-. Built to be harsh, not flattering...    |
+--------------------------------------------------------------+

og:url resolves, so the card should render. The image is oversized, not 1.91:1, and names a different product.

Rewrites

Title

  1. Free SEO & AI Search Audit, Graded A+ to F- | Brutally Honest (61 chars)
  2. Brutally Honest SEO Audit: 84 Checks, Graded A+ to F- (53 chars)

Meta description

  1. Get a free, brutally honest SEO and AI-search audit of one page: 84 checks, a grade from A+ to F-, and evidence quoted for every mark. No card, no sales call. (157 chars)
  2. See what is costing your page traffic: 84 SEO and AI-search checks, scored out of 100, with fixes ranked by impact. One page free, no sales call. (145 chars)

H1 Your website probably deserves a D. A free, brutally honest SEO and AI-search audit shows you why.

Opening paragraph (56 words)

Brutally Honest Website Reviews is a free SEO and AI-search audit of one web page. We run 84 checks, score the page out of 100 and grade it A+ to F-, quoting the exact title, heading or tag behind every mark we take off. You get the grade, evidence and ranked fixes within 72 hours.

H2 outline

  • What does the SEO and AI-search audit check? (9-area weighting table)
  • Why can't ChatGPT, Claude and Perplexity see some pages? (link to /ai-search; cite the source)
  • What we found auditing N real pages (new: original data, the most important addition)
  • Which mistakes automatically fail a page? (hard-caps table)
  • What the auditor will never do (name the subject in each H3)
  • What's in the report? (plus a real, redacted screenshot)
  • How is this different from free instant SEO checkers? (new)
  • Who grades your page? (new: named person and credentials)
  • What a page audit can't see on its own
  • How much does a full website audit cost? (give a starting price, not only "Contact for Quote")
  • Questions, answered bluntly

Competitor Gap (if competitors provided)

No competitor URLs were provided, so no competitor pages were fetched. The instant free-SEO-checker format dominates the head term. This page's winnable edge is a human-checked, evidence-quoting report plus the raw-vs-rendered AI-crawler test. It needs real data and a named expert to prove that edge.

Measurement Plan

  • Google Search Console: verify brutallyhonest.rbamarketing.com and submit the sitemap. Run URL Inspection on / to confirm "Google-selected canonical" equals https://brutallyhonest.rbamarketing.com/. Then baseline clicks, impressions, CTR and position in the Performance and Generative AI performance reports.
  • Bing Webmaster Tools: add the site, submit the sitemap, push all 9 URLs via IndexNow, and track the AI Performance report for Copilot citations and grounding queries.
  • GA4: segment referrals from chatgpt.com, perplexity.ai, claude.ai, gemini.google.com and copilot.microsoft.com. Track /request-report submissions as the conversion.
  • Manually test "free SEO and AI search audit", "honest website review", "why can't ChatGPT see my website", "website audit graded A to F", "AI search visibility audit small business" and "brutally honest website review" in Google AI Mode, ChatGPT, Perplexity and Copilot. Record whether the site or brand is cited.
  • Re-audit in 30 and 90 days.

Audit Limitations

  • Rendered checks: rendered DOM, the raw-vs-rendered diff, the rendered crawler-UA comparison, mobile layout (8.7) and basic accessibility (9.7) were all measured with Playwright/Chromium (Pixel 5 profile and a 1366×900 desktop viewport).
  • Performance: lab only. CrUX has no field data for this URL. INP (8.2) is NOT VERIFIED.
  • Colour contrast was computed from computed styles in the rendered DOM, so text over background images or gradients was skipped. Treat it as a floor on the failures, not a full WCAG audit.
  • Indexing status: NOT VERIFIED. No Search Console access was available.
  • Bot checks used spoofed user-agent strings from a non-crawler IP. Cloudflare's treatment of verified crawler IPs is NOT VERIFIED.
  • No competitor URLs, Search Console data or analytics data were supplied, so impact ranges are directional.
  • Off-page factors (backlinks, brand mentions, subdomain authority) and sitewide issues were not fully assessed from a single page. The other 8 pages' canonicals were not checked here.
  • /llms.txt returns 404. Not scored, and not recommended for Google.

What we changed in this report

We removed notes that compared this report with an earlier test run, tidied internal file references, and corrected category letter grades in the scorecard that didn't match the published grade scale. No score, finding or fix was changed.

Open this report in our report viewer

Sources for these checks

Read every report

All 63 reports, plus each round's site summary and action items, are in our report viewer.

Open the report viewerThe Brutally Honest report viewer showing our 7 audit rounds, with the first-round homepage report open

Get your own page graded, free

Grade My Page →