seoprog.

audit · fix · verify — close the loop
phase 1
Audit one page. Paste its HTML (or enter a URL and hit Try fetch) to get an SEO score and an AI-readiness score, plus a checklist. Then "Copy AI fix prompt" to get the repairs written for you.

On-page audit

Paste a page's HTML, or fetch a live URL once deployed (the proxy bypasses the browser CORS wall). Running locally, fetch may be blocked — paste source instead.

Audit your whole site at once. Enter your URL - it scores every page, flags duplicate titles and descriptions, and the "AI site fix plan" button writes a prioritized to-do list.

Site crawl

Audits every page from your sitemap.xml (falls back to homepage links if there's no sitemap) and scores each for SEO and AI readiness. Needs the deployed proxy - running locally most sites will be unreachable.

See your page before you publish. Type a title and description to preview the Google result and social card, keep them inside the green counts, then copy the ready-made tags into your page head.

Compose

Type once — see Google, see the social card, copy the meta block.

Previews

Google desktop result

example.com
Page title
Meta description preview shows here.

Social card (Open Graph)

og:image
example.com
Page title
Meta description preview.

Generated <head> tags

Paste into your page head. Includes title, description, canonical, Open Graph and Twitter cards.


      
Generate structured data (JSON-LD). It tells search engines and AI exactly what a page is, which can earn rich results. Pick a type, fill the fields, copy the code into your page head.

JSON-LD generator

Structured data for rich results. Pick a type, fill the fields, copy the script.

Output

Drop this in your <head> or before </body>.


        
Can AI assistants find and recommend you? Check whether your robots.txt blocks AI crawlers, generate an llms.txt, and spot-check your visibility in AI answers. Add your API key here to turn on "Run with AI" everywhere.

AI crawler access

Checks your robots.txt for the crawlers that feed ChatGPT, Claude, Perplexity, Gemini and Copilot. A site that blocks these is invisible to AI answers - and most owners never checked. Also looks for an llms.txt.

Run AI in-app (bring your own key)

Paste an Anthropic API key and the "Run with AI" buttons execute prompts here instead of via copy-paste. The key is stored only in this browser and sent only with your own requests - never to anyone else.

AI visibility spot check

Asks Claude buyer-intent questions about your niche with live web search, then checks whether your brand or domain appears in the answers. The GEO question, answered for the cost of a few API calls.

llms.txt generator

A plain-text map of your site for language models - the AI-era counterpart to sitemap.xml. Serve it at /llms.txt.

Output

Save as llms.txt in your site root.


        
Track your Google rankings over time. Log keywords or import a Search Console CSV - the tool surfaces your easiest wins (page-2 keywords and weak click-rates). Click any keyword for its history. Data stays in your browser.

Rank tracker

Log a keyword's position over time. Stored locally in your browser. Import a Google Search Console CSV to bulk-add a dated snapshot.

Where Seoprog is headed. A quick read on what it does today and what is planned next.

Where this goes next

Phase 1 is this single file: everything runs in the browser, data lives in localStorage, exportable to JSON. When it earns the upgrade, these move server-side.

  • Scheduled rank checks — a cron job snapshots positions automatically instead of manual logging.
  • GSC OAuth sync — pull clicks/impressions/position straight from Search Console on a schedule, no CSV step.
  • Managed AI plan — BYO-key execution is live. The paid flip: set ANTHROPIC_API_KEY as a Pages secret, add auth + per-user metering in front of /api/ai, clients stop sending keys. Same endpoint, same shape.
  • Scheduled visibility checks — the spot check is live; the subscription version runs it weekly via cron and alerts when your brand appears or disappears from AI answers.
  • Storage — Supabase table swaps in behind the same data shape used here, so the migration is a thin adapter, not a rewrite.
Architecture note: the tracker reads/writes through one store object. Point that at an API later and the UI doesn't change — same pattern as your other builds.