Documentation
A complete guide to every feature — what the data means, how to read it, and what to do with it.
Overview
SEO Captain is a Chrome extension that analyzes any webpage’s SEO health directly from your browser — no external tools, no account required.
Open the extension on any http:// or https:// page and it instantly extracts everything relevant to SEO: meta tags, headings, images, links, structured data, content quality, and more. All analysis runs locally — nothing is sent to any external server unless you choose to use AI generation with your own API key.
Installation
SEO Captain installs like any Chrome extension and requires no account or login to use.
Search for “SEO Captain” in the Chrome Web Store and click Add to Chrome.
Click the puzzle-piece icon in Chrome’s toolbar, find SEO Captain, and click the pin icon so it’s always accessible.
Navigate to any http:// or https:// page, then click the SEO Captain icon. Analysis starts immediately.
To use AI-powered meta generation, go to the Settings tab and paste your Anthropic API key. It is stored locally in your browser — never transmitted anywhere except Anthropic’s API when you explicitly trigger generation.
chrome:// pages, the Chrome Web Store, or browser PDF viewer. On those pages you’ll see a friendly error message.
How It Works
SEO Captain uses a content script injected into the active tab to read the live DOM — no third-party APIs, no scraping.
When you open the popup, the extension sends a message to its content script already running in the page. The content script reads the DOM directly — title tags, meta elements, heading hierarchy, image attributes, link relationships, structured data, and more — and returns it to the popup for display.
Because the analysis runs on the rendered DOM (after JavaScript has executed), the data you see reflects what search engine crawlers that render JavaScript would see — a significant advantage over source-only tools.
Summary Tab
Your at-a-glance SEO dashboard — all key meta signals, heading counts, and quick-access links on one screen.
Title Tag
Displays the page’s <title> tag along with a character count. The count is color-coded to reflect Google’s typical display limits:
If the title is missing entirely, a red alert reads “Title is missing!” — this is a critical SEO issue that should be fixed immediately.
Meta Description
Shows the <meta name="description"> tag with a character count. Google typically truncates descriptions at 155–160 characters in search results:
Keywords
Displays the <meta name="keywords"> tag content. Note: Google has ignored this tag since 2009, but some minor search engines and CMS systems still use it. Its absence is not an SEO problem.
Canonical URL
Shows the <link rel="canonical"> href. The canonical tag tells search engines which URL is the “master” version when duplicate or similar content exists across multiple URLs. If missing, it shows “Canonical URL is not defined.” — not always a problem, but worth setting on pages with URL parameters or duplicate content.
Robots Tag
Displays directives from <meta name="robots">. Common values:
| Directive | Meaning |
|---|---|
index, follow | Default behavior — crawl and index this page, follow its links |
noindex | Do not include this page in search results |
nofollow | Do not follow links on this page for crawling |
noarchive | Do not show a cached copy in search results |
nosnippet | Do not show a text snippet in search results |
If blank, SEO Captain shows “Not set (defaults to index, follow)” — this is the normal, expected state for most pages.
Author & Publisher
Pulled from <meta name="author">, Open Graph article:author, or og:site_name as fallback. Useful for news and article pages where Google’s News tab uses authorship signals.
Language
Reads the lang attribute on the <html> element (e.g., en, en-US). This is important for international SEO and assistive technologies. Missing lang attribute is flagged in the Audit tab.
Heading Counts (H1–H6)
A quick count of each heading level found on the page. Color coding on H1:
Schema Indicator
If the page contains <script type="application/ld+json"> structured data blocks, the schema types found are listed here (e.g., Article, BreadcrumbList). Schema markup helps Google display rich results — knowledge panels, star ratings, breadcrumbs, FAQs, and more.
Robots.txt & Sitemap.xml Buttons
Quick-access buttons that open the site’s /robots.txt and /sitemap.xml in new tabs so you can inspect them without navigating away.
Generate Tab
Two meta generation modes: an instant offline JavaScript engine, and enhanced AI suggestions via Claude — your choice depending on need and speed.
JS Auto-Generation (Instant · No API Required)
Runs entirely in your browser the moment the extension opens. No API key, no internet call, no waiting. The engine analyzes the page’s extracted data using the following logic:
Keyword extraction: Words are scored by frequency across the title, H1, H2s, and body text. Words in the title or H1 receive a 6× frequency boost. Common stop words (the, and, is, are… ~80 words) are filtered out. The top 10 keywords become the basis for suggestions.
Title strategies (up to 3):
| Strategy | Logic |
|---|---|
| H1-Based | Uses the page’s H1 tag, appends brand name if it fits within 63 characters |
| Keyword-Phrase | Combines top two keywords with brand name; only used if result is 20–65 characters |
| Optimised Existing | Takes the current title; trims if over 60 chars, adds brand if under 50 chars |
Description strategies (up to 3): Sentences from the body text are scored using keyword matches, position bonuses (earlier sentences score higher), and length bonuses (100–155 raw chars is the sweet spot). Each strategy targets a 130–162 character output:
| Strategy | Logic |
|---|---|
| Best Sentence | Highest-scoring sentence from the full body text |
| Intro-Based | Best sentence restricted to the first 6 sentences only |
| Structure-Built | Combines H1 + top 2–3 H2 tags: “[H1]. Topics covered: [H2], [H2], [H2].” |
AI Generation via Claude
Click Generate with Claude AI to send page context to Anthropic’s Claude model. This produces more nuanced, human-readable suggestions that take into account the actual meaning of the page rather than pure keyword frequency.
What gets sent to Claude: page URL, current title, current description, H1, top 5 H2s, word count, and a 1,200-character slice of the body text. No personal data, no cookies, no user information.
The AI returns 3 title options and 3 description options, each with a short strategy note. Use these as starting points — they work best when combined with your own knowledge of the page’s purpose and audience.
SEO Audit Tab
A 17-check audit that scores your page from 0 to 100, with a circular progress ring and per-check pass/warn/fail breakdown.
Understanding the Score
The score is calculated as earned points ÷ maximum possible points × 100. Each check carries a different weight depending on its SEO importance:
The 17 Audit Checks
<title> tag is present. Missing titles are auto-generated by Google, often poorly.<img> tags with alt attributes. Alt text helps Google understand image content and improves accessibility.<link rel="canonical"> is present, preventing duplicate content issues.<script type="application/ld+json"> block present, enabling rich results.<meta name="viewport"> present. Required for mobile-friendliness — a strong Google ranking factor.<html lang=""> attribute set. Helps search engines serve the right language to the right users.Preview Tab
See exactly how your page appears in Google search results and social media sharing cards before publishing changes.
Desktop SERP Preview
Simulates a Google desktop search result with:
- URL breadcrumb in grey
- Title in blue (truncated at 60 characters)
- Meta description in grey (truncated at 160 characters)
- Character count hints for title and description below the card
Mobile SERP Preview
Same as desktop but with narrower constraints reflecting Google’s mobile display limits: title at 55 characters, description at 120 characters.
Facebook OG Card
Renders the Open Graph preview card using og:image, og:title, og:description, and og:site_name. A placeholder appears if og:image is missing or fails to load.
Tag presence indicators (✓/✗) are shown for each OG property so you can immediately see what’s missing without hunting through source code.
Twitter/X Card
Shows the Twitter/X link card. Supports both summary (small thumbnail left) and summary_large_image (full-width image) card types. Falls back to og:image if twitter:image is not set.
Tag presence indicators show the status of twitter:card, twitter:title, twitter:description, and twitter:image.
Content Tab
Deep content analysis — readability scoring, keyword density, content freshness, and heading architecture.
Readability Score
Uses the Flesch-Kincaid Reading Ease formula, the same scale used by academics, journalists, and content strategists:
Score = 206.835 − 1.015 × (words ÷ sentences) − 84.6 × (syllables ÷ words)
Content Freshness
Extracts published and modified dates from <meta property="article:published_time">, itemprop="datePublished", and <time pubdate> elements. If no structured date is found, shows “Not found”.
Search engines use freshness as a ranking signal — particularly for news, trending topics, and queries with implied recency (e.g., “best laptops 2024”). Keeping the modified date updated after content revisions helps.
Keyword Density
Shows the top 10 keywords by frequency (after stop-word filtering) with their occurrence count, density percentage, and placement badges:
Density color coding:
The best pages have their primary keyword appearing in the title, H1, and description (all three T/H1/D badges lit). This isn’t about stuffing — it’s about alignment between the page’s topic signals.
Heading Structure
The count bar shows H1–H6 counts in a row (same color logic as the Summary tab). Below it is a full document-order heading tree, indented by level, so you can see how the content is structured hierarchically. Each level uses a distinct color for quick visual scanning.
A well-structured page typically has: one H1 (the page title), several H2s (major sections), and H3s nested under relevant H2s. Skipping levels (e.g., jumping from H2 to H4) makes structure harder to parse for both users and crawlers.
Images Tab
A complete image audit — alt text coverage, file sizes, lazy loading status, and background image detection — all in a filterable table.
Filter Bar
Six clickable filters re-render the image table instantly:
| Filter | Shows |
|---|---|
| Total | All images including background images |
| With Alt | <img> tags that have an alt attribute (background images excluded) |
| No Alt | <img> tags missing the alt attribute — your action list for accessibility |
| With Title | Images that have a title attribute (bonus context, not required) |
| Lazy | Images using loading="lazy" for performance optimization |
| BG Images | Background images from inline CSS style="background-image: url(...)" |
Table Columns Explained
| Column | How to Interpret |
|---|---|
| Thumbnail | 36×36px preview — helps you identify the image at a glance. Grey box = image failed to load. |
| Image URL | Filename (clickable — opens full image in new tab). Format badge shows WEBP/JPG/PNG/GIF/SVG. |
| Alt | ✓ green = alt present, ✗ red = missing, violet “BG” = background image (alt N/A for decorative backgrounds) |
| Title | ✓ = title attribute set, — = not set. Title text previewed below badge (30 chars) |
| Size | Width × height in pixels (top), file size in KB/B from browser performance API (bottom). Blank = data not available (CORS-restricted or cached without timing headers). |
| Lazy | ✓ = loading="lazy" set. Important for Core Web Vitals — above-the-fold images should NOT be lazy-loaded. |
alt="") rather than removing it — this tells screen readers to skip the image.Background Images
SEO Captain detects background images from inline style attributes (background-image: url(...)). These appear in the table with a violet BG badge instead of an alt ✓/✗, because background images are inherently decorative — alt text doesn’t apply to them. SVG data URIs (typically icons) are automatically filtered out.
Links Tab
A filterable list of every link on the page, with relationship attributes, plus a built-in broken link checker for internal links.
Link Type Badges
Each link row shows a set of colored badges indicating its properties:
Filter Bar
Click any filter pill to instantly re-render the list for: Total, Internal, External, Nofollow, Sponsored, New Tab. The counter in each pill shows how many links match that category. Up to 100 links are shown per filter.
Broken Link Checker
Click Check Broken Links to run HEAD requests against all internal links (same-origin only, up to 25 at a time). Results show each URL’s HTTP status:
| Status | Meaning |
|---|---|
200 | OK — link is working |
301 / 302 | Redirect — link works but may dilute link equity |
404 | Not Found — broken link, fix or remove |
500+ | Server error — may be temporary, worth monitoring |
ERR | Network error — connection refused or DNS failure |
Tools Tab
Utility actions — export reports, copy meta tags, save snapshots for tracking, generate JSON-LD schema, and jump to Google Search Console.
Export Report
Downloads a self-contained .html file named seo-report-{date}.html containing the SEO audit score, overview table, and all meta data in a shareable format. No special permissions needed — the file is generated in-browser using a Blob download.
Copy Meta Tags
Copies the full set of meta tags as ready-to-paste HTML to your clipboard, including: <title>, <meta name="description">, keywords, canonical, og:title, og:description, og:image, twitter:card, and twitter:title.
Save Snapshot
Saves a lightweight snapshot of the current page — URL, title, description, word count, and SEO quick score — to your browser’s local storage. Useful for tracking SEO progress over time without leaving the extension.
Up to 20 snapshots are stored (newest first). The Snapshot History section below the buttons lists all saved entries, with the current page’s URL highlighted. Each entry can be individually deleted.
Schema Generator
Generates JSON-LD structured data pre-filled with data extracted from the current page. Five schema types are available:
| Type | Pre-filled from page data | Best for |
|---|---|---|
| Article | Headline, description, URL, author, publisher, dates | Blog posts, news articles |
| FAQ Page | First 3 H2 tags as question names | FAQ sections (enables Google rich results) |
| Product | Name, description, URL | E-commerce product pages |
| BreadcrumbList | URL path segments as list items | Site breadcrumb navigation |
| WebSite | Site name, origin URL, SearchAction | Homepage sitelinks search box |
Copy the generated JSON with the Copy JSON-LD button to get it wrapped in a <script type="application/ld+json"> tag, ready to paste into your CMS or <head>.
GSC Quick Link
Opens Google Search Console with the current page’s URL pre-filled, so you can jump directly to the GSC coverage or performance report for that exact page without having to copy/paste the URL.
Settings Tab
Configure your Anthropic API key for AI generation, manage stored data, and find version and support information.
Setting Up Your API Key
Sign up at console.anthropic.com, create a project, and generate an API key starting with sk-ant-api03-…
Open SEO Captain → Settings tab → paste in the Anthropic API Key field → click Save.
A green “✓ API key saved” message appears for 3 seconds. The Generate tab’s amber notice will disappear.
chrome.storage.local — scoped to the extension, not accessible to websites. It is transmitted only to api.anthropic.com when you trigger AI generation, and is never sent to echozat.com.Data Management
Clear all snapshots — removes all saved SEO snapshots from local storage. Useful when you want to start fresh tracking a site. This action cannot be undone.
Clear API key — removes the stored API key from local storage and clears the input field. Use this if you want to revoke access or switch to a different key.
Interpreting Scores & Data
A quick reference for what the numbers mean and what “good” looks like.
| Metric | Ideal | Acceptable | Needs Fix |
|---|---|---|---|
| Title length | 50–60 chars | 30–69 chars | <30 or >69 |
| Description length | 150–160 chars | 100–169 chars | <100 or >169 |
| H1 count | Exactly 1 | — | 0 or 2+ |
| Readability score | 60–100 | 50–59 | <50 (for general audiences) |
| Keyword density | 1–3% | <1% | >3% (stuffing risk) |
| SEO audit score | 85–100 | 65–84 | <65 |
| Word count | 300+ words | 200–299 words | <200 words (thin content) |
| Image alt coverage | 100% | 80–99% | <80% |
Frequently Asked Questions
Common questions about using SEO Captain, interpreting results, and troubleshooting.
General
SEO Captain works on any http:// or https:// page, including pages behind a login (since the content script reads the already-rendered DOM in your browser). It does not work on browser-internal pages (chrome://), the Chrome Web Store, PDF viewer pages, or pages that explicitly block all content script injection.
No — all analysis runs locally in your browser. Page data is never sent to echozat.com or any analytics service. The only external call the extension makes is to api.anthropic.com when you explicitly click “Generate with Claude AI” — and even then, only if you’ve configured your own API key. You are in full control.
Yes. The extension itself is free. The only cost involved is if you use AI generation — that requires an Anthropic API key billed by Anthropic directly (pay-per-use). The JS auto-generation engine (titles and descriptions) is completely free and requires no API key.
This usually happens for one of these reasons: (1) the page is a browser-internal page like chrome://settings or the Chrome Web Store — these block all extensions, (2) the page uses a Content Security Policy that prevents script injection, or (3) the extension was just installed/updated and the tab hasn’t been refreshed yet. Try hard-refreshing the tab (Cmd+Shift+R / Ctrl+Shift+R) and reopening the extension.
The content script loads once when a tab opens and is guarded against re-injection. To get fresh data after making changes to a page, hard-refresh the tab first (Cmd+Shift+R / Ctrl+Shift+R), then open SEO Captain. Simply closing and reopening the popup is not enough — the tab itself needs to be refreshed.
Summary & Meta Tags
Google measures title display width in pixels, not characters. Wide letters like W, M, and uppercase text consume more space than narrow letters like i, l, or lowercase text. A 58-character title with many wide characters can exceed Google’s ~580px display budget. If you’re seeing truncation, try shortening to 50–54 characters to create a safe margin, especially if your title has many capital letters or wide punctuation.
No tool can prevent Google from rewriting titles and descriptions — that’s entirely Google’s decision. However, Google is less likely to rewrite them if they are: descriptively accurate (match the page content), within the character limits, and not keyword-stuffed. SEO Captain helps you meet all those criteria, which significantly reduces the chances of rewriting. But it cannot guarantee Google will use your text as-is.
Not at all. The <meta name="keywords"> tag has been officially ignored by Google since 2009, and by most major search engines since around the same time. Leaving it blank is perfectly fine. The only edge cases where you might still want it are: certain minor search engines, some CMS systems that generate sitemaps or internal search indexes from it, or legacy technical requirements on specific platforms.
It depends. A canonical tag is most valuable when: (1) the same content is accessible via multiple URLs (e.g., with and without trailing slash, with/without URL parameters, HTTP vs HTTPS), (2) you have very similar content on multiple pages, or (3) your site accepts tracking parameters that create URL variations. For a simple page with a unique URL, no canonical is still perfectly fine. Google will often infer the canonical itself.
SEO Captain specifically reads <script type="application/ld+json"> blocks — the JSON-LD format. It does not detect schema implemented as Microdata (inline HTML attributes like itemprop) or RDFa. If your structured data uses one of those older formats, the indicator will show “No schema” even though schema is technically present. Google supports all three formats, but JSON-LD is now the recommended approach.
SEO Audit
Focus on the highest-weight failing or warning checks first. Sort by points: HTTPS (8), H1 (8), meta description exists (8), image alt text (8), title exists (6), title length (6), description length (6), JSON-LD (6), OG tags (6), viewport (7). A page with all these passing easily reaches 85+. Common quick wins at the “Good” level are: adding missing OG tags, fixing title/description length, and ensuring all images have alt attributes.
The 300-word minimum is a general guideline, not an absolute rule. Short landing pages, contact pages, and homepages that convert well at low word counts are perfectly fine. The check is designed to catch unintentionally thin pages where content just hasn’t been written yet. You can safely ignore this check for pages where brevity is a deliberate design choice.
If you have a <meta name="robots" content="noindex"> or nofollow directive set (possibly added by your CMS automatically), the audit will warn about it even if you don’t intend to block indexing. Check your page source to confirm whether the tag is actually present and what value it’s set to. Many CMS platforms add noindex to draft, staging, or search results pages by default.
No — and any tool that claims otherwise is misleading you. The SEO Captain score measures on-page technical and structural signals. Rankings also depend on factors outside the page: domain authority, backlink profile, Core Web Vitals, user engagement signals, topical relevance, competition, and Google’s constantly-evolving algorithms. A high score means your page’s on-page fundamentals are solid — which is a necessary but not sufficient condition for ranking well.
Content Analysis
Not necessarily. First, check if the low score is appropriate for your audience. Technical documentation, medical content, legal text, and academic writing is expected to be complex — a Flesch score of 30 is fine for a whitepaper aimed at PhDs. But if you’re writing for a general consumer audience and your score is low, the most effective improvements are: breaking long sentences into shorter ones, replacing jargon with plain language, and converting complex compound sentences into two simpler ones.
The table shows the top 10 keywords by frequency after filtering ~80 common stop words. Your keyword might not appear because: (1) it’s less frequent than the 10 keywords shown, (2) it’s in the stop word list (very common words), (3) it’s a multi-word phrase (the tool analyzes individual words, not phrases), or (4) the body text used for analysis is capped at 2,000 characters — if the page is very long, some content may not be captured.
SEO Captain reads publication dates from machine-readable structured signals: <meta property="article:published_time">, itemprop="datePublished", <time pubdate>, and similar patterns. A date visible in the page’s body text or displayed by a custom component that doesn’t use these standardized attributes won’t be detected. To make dates machine-readable (and improve Google’s understanding of freshness), add the appropriate schema.org or Open Graph date meta tags.
Images & Links
File sizes come from the browser’s Performance Resource Timing API. Three situations cause a blank: (1) cross-origin images without a Timing-Allow-Origin response header — browsers block their timing data for privacy, (2) images served from cache where transferSize = 0 and no encodedBodySize is available, (3) inline data URIs — these have no network request to measure. Blank size is not an error; it just means timing data isn’t available for that particular image in this browser session.
Several reasons can cause a mismatch: (1) Images loaded by JavaScript after the initial DOM render may not be captured if the extension opened before they loaded — hard-refresh and reopen. (2) CSS background images in external stylesheets are not captured (only inline style attributes are); images set via CSS classes in linked stylesheets won’t appear. (3) Images inside iframes are in a different document context and cannot be accessed.
A few possibilities: (1) The server returns a 404 for HEAD requests but works for GET requests — this is a server misconfiguration but not uncommon. (2) The page requires JavaScript to render and the HEAD request hits a pre-render that isn’t ready. (3) Rate limiting — if you checked many links quickly, the server may have temporarily blocked the requests. (4) Authentication — the link requires a session cookie that the HEAD request doesn’t carry. Try using the “Re-check” button and visiting the URL directly to compare.
The 25-link cap prevents the extension from overwhelming the server with simultaneous HEAD requests, which could trigger rate limiting or look like a denial-of-service attempt. All 25 requests run in parallel for speed. For larger link audits on production sites, a dedicated crawl tool like Screaming Frog, Sitebulb, or Ahrefs Site Audit is more appropriate.
AI Generation & API Key
Sign up at console.anthropic.com, create a new project, and generate an API key from the Keys section. New accounts receive a free credits tier. Beyond that, Anthropic charges per token (input + output) on a pay-per-use basis. Each SEO Captain AI generation call uses a small amount of tokens — typically well under 1,000 input tokens and 400 output tokens per call.
Your API key is stored in chrome.storage.local, which is scoped exclusively to the SEO Captain extension. Web pages cannot access it; other extensions cannot access it. It is only transmitted to api.anthropic.com when you click “Generate with Claude AI”, over HTTPS. It is never sent to echozat.com, never logged, and never stored anywhere except your own browser. As a best practice, you can set usage limits on your Anthropic API key from the console to cap any potential misuse.
Common causes: (1) Invalid API key — double-check the key in Settings; it should start with sk-ant-api03-. (2) Insufficient credits — log into console.anthropic.com to check your balance. (3) Rate limiting — Anthropic’s API has per-minute request limits; wait a few seconds and try again. (4) Network issue — check your internet connection. If the problem persists, the Anthropic status page at status.anthropic.com will show any ongoing incidents.
The AI generates suggestions based on what it receives: URL, title, description, H1, top H2s, and a 1,200-character body text slice. Pages where the most relevant content appears deeper in the body (beyond the first ~1,200 characters) may yield less accurate suggestions. Also, pages with very little readable body text (mostly images, videos, or JavaScript-rendered content with no server-side rendered text) give the AI less to work with. For those pages, the JS auto-generation engine using the heading structure often produces more usable results.
Tools & Export
Paste the copied JSON-LD (which includes the <script type="application/ld+json"> wrapper) inside the <head> section of your HTML page. In a CMS like WordPress, most SEO plugins (Yoast, Rank Math) have a field for custom schema; paste it there. For Shopify, use the Additional scripts section in the theme editor or a custom app. After adding it, validate it with Google’s Rich Results Test to confirm it’s correctly structured.
Snapshots are stored in chrome.storage.local, which is tied to your Chrome profile and the extension. They can be lost if: (1) you used the “Clear all snapshots” button in Settings, (2) you uninstalled and reinstalled the extension (local storage is deleted on uninstall), (3) you cleared Chrome’s site data with an overly broad setting that included extension storage. Snapshots are not synced across devices — they are local to the browser where they were saved.
Not currently — snapshots can be viewed within the extension and deleted individually, but bulk export to CSV/JSON is not available in version 1.0. The HTML Export Report (Export Report button in Tools) exports the current page’s full analysis as a self-contained HTML file you can share, print, or archive.
Privacy & Data
No. There is no analytics, telemetry, or usage tracking of any kind in the extension. It does not know what pages you’ve opened it on. No data is ever sent to echozat.com. The only external network call the extension can make is to api.anthropic.com, and only when you explicitly click “Generate with Claude AI”.
activeTab — to inject the content script into the current tab and read its DOM. storage — to save your API key and snapshots in local storage. tabs — to open links (Robots.txt, Sitemap, broken link results, GSC) in new tabs. Host permission for api.anthropic.com — to make direct API calls from the browser popup for AI generation. No other permissions are requested.
The content script is injected into pages automatically (because it’s declared as a content script in the manifest for immediate availability), but it only reads and sends data when the popup sends an explicit analyzePage message — which only happens when you open the extension popup on a page. There is no background monitoring, passive data collection, or reading of pages you haven’t explicitly opened the extension on.