close

DEV Community

fsakbas
fsakbas

Posted on

How I Built a Free GEO Checker That Scores Your Website's AI Search Visibility

TL;DR: I built EchoRank — a free toolkit for checking how visible your website is to AI search engines like ChatGPT, Perplexity, and Gemini. Here's what I learned building the GEO Checker, what signals actually matter, and why traditional SEO is no longer enough.


The problem I kept running into

A client came to me with a familiar complaint: their Google rankings were fine — top 3 for most of their target keywords. But their sales team was noticing something strange. Prospects were saying "I asked ChatGPT about [product category] and you weren't mentioned."

I started digging. Turns out, ranking on Google doesn't automatically mean you get cited by AI search engines. ChatGPT, Perplexity, and Gemini pull from a different set of signals — schema markup, semantic structure, citation patterns, authority in their training data — and many well-ranked sites are essentially invisible there.

I couldn't find a tool that measured this. So I built one.


What is GEO (Generative Engine Optimization)?

GEO stands for Generative Engine Optimization — the practice of optimizing your content so AI-powered answer engines cite, quote, and reference your site.

Traditional SEO optimizes for: keyword density, backlinks, page speed, Core Web Vitals.

GEO optimizes for:

  • Semantic clarity — Is your content unambiguous enough for an LLM to extract facts from?
  • Structured data — Do you have JSON-LD schema that AI crawlers can parse?
  • Citation authority — Are other authoritative sources already referencing you?
  • llms.txt — Have you published a machine-readable summary of your content for AI engines?
  • E-E-A-T signals — Author credentials, organizational trust signals, sourced claims
  • Answer-shaped content — Does your content directly answer questions, or just rank for them?

Building the GEO Checker: technical deep dive

The GEO Checker runs a multi-layer analysis on any URL. Here's how it works under the hood.

Stack

  • Next.js 15 App Router — server components for the page, client component for the form UI
  • TypeScript — everything is typed, especially the CheckResult and ToolScanResult types
  • postgres.js — lightweight Postgres client connected to a pgvector-enabled Postgres 18 instance
  • Tailwind CSS v4 + shadcn/ui — UI components

What checks does it run?

The GEO Checker evaluates 12+ signals across 4 categories:

1. Structured Data (Schema.org)

  • Detects JSON-LD presence and type (Article, Organization, FAQPage, HowTo, etc.)
  • FAQPage and HowTo schemas are especially valuable
  • Validates that structured data is parseable

2. Content Semantics

  • Heading hierarchy analysis
  • Presence of direct-answer patterns
  • Paragraph length distribution
  • Internal link anchor text quality

3. AI Crawler Signals

  • robots.txt analysis — are GPTBot, ClaudeBot, PerplexityBot blocked?
  • llms.txt detection
  • Open Graph and Twitter Card completeness
  • Canonical tag presence

4. Authority & Trust Signals

  • HTTPS enforcement
  • Author markup
  • Organization schema with sameAs links
  • Date freshness signals

What I learned from thousands of scans

Most commonly missing signals:

  1. llms.txt — less than 2% of sites have it
  2. Author schema — missing on ~80% of blog posts
  3. FAQPage markup — used by <5% of content sites
  4. dateModified — sites update content but don't update the schema date

The highest-impact single change: Adding FAQPage JSON-LD to existing content. AI engines love structured Q&A pairs — they map directly to the format AI answers are generated in.


Try it free

All tools on EchoRank are free to use:

  • GEO Checker — AI search visibility score
  • llms.txt Generator — Auto-generate your AI content summary
  • AI Citation Gap Analyzer — See where your brand is missing from AI answers
  • Agentic UX Auditor — Grade your site's readiness for AI agents
  • ROI & PPC Calculator — SEO and paid campaign ROI simulator

Happy to answer questions about the data or technical implementation in the comments!

Top comments (0)