The hardest part of running a small SEO engagement is not the audit. It is explaining, on a 15-minute call, why the client's page is not ranking for the search term they care about when ten other pages are. I built the Keyword Inspection tool to collapse that conversation into a single screen.
You pick the client's target search term, you grab the Google top 10, you paste the client's URL, and in about a minute you have a keyword-by-keyword, topic-by-topic, schema-type-by-schema-type gap report. No paid API. No client login. Just public HTML and a browser.
This post is angled for agency operators running the $20 Agency playbook — solo SEOs, fractional marketing leads, and small shops who need client-ready deliverables without a $500-a-month tool stack. If you are running a single site of your own, the workflow still applies, but the framing below assumes you are presenting to someone else.
Keyword Inspection answers the second question. You give it a search term, your URL, and the top ten Google results. It fetches every page, extracts the title, headings, body text, and schema from each, and then shows you — keyword by keyword, topic by topic, schema type by schema type — exactly what the ranking pages have in common that your page is missing.
No API keys. No paid plan. It runs in your browser against public HTML.
Why Keyword Gap Analysis Is the One SEO Task Worth Doing First
Most on-page SEO advice is generic. Write good titles. Use H2s. Add schema. Sure. But generic advice produces generic pages, and generic pages rank on page four.
When a set of pages is already ranking for your target term, Google has already told you what the winning formula looks like for that specific query. It is not a secret anymore. The top ten are the rubric. Your job is to read the rubric and figure out where your page falls short.
Three gaps matter more than the others:
The heading gap. Pages that rank for a term almost always use that term — or a close variant — in their H1 or an H2. If eight of the top ten use the phrase "equipment financing" in a heading and you only use it once in your second paragraph, you are telling Google your page is about something adjacent, not the thing itself.
The topic gap. Ranking pages cover a cluster of subtopics, not a single one. If every competitor has an H2 about approval timelines and another about credit requirements and you have neither, the gap is not "I should use the keyword more" — it is "I have not covered the topic deeply enough for this query."
The schema gap. If the top pages all have FAQPage schema and yours doesn't, you're not eligible for the FAQ rich result that the other ten are fighting for. This is the single most fixable gap in the list, and the easiest one to measure.
Keyword Inspection separates all three so you can see them at a glance instead of reading ten pages side by side.
How to Use It, Step by Step
Go to /tools/keyword-inspection/. You'll see three inputs.
The search term. Type the exact phrase you want to rank for. Do not type your brand name. Do not type a category — type the phrase a searcher would type. If your target is "best equipment financing for laundromats," type that. The tool uses this as context for the AI rewrite prompt it generates at the end.
Your URL. The page you are trying to rank. This is the page whose title, headings, and body will be compared against the competitor set.
The competitor URLs. Go to Google. Run your target search in an incognito window so your personalization doesn't skew the SERP. Skip the sponsored results at the top, the AI Overview, the map pack if it appears, and the People Also Ask box. Right-click each organic result and copy the URL. Paste them, one per line, into the textarea. You can paste anywhere from one to ten — more competitors means a stronger signal, but even three is useful if the SERP is thin.
Click Run inspection. The tool fetches each page through a proxy, parses the HTML, and runs a gap analysis. On a broadband connection with ten competitors, you get results in about forty-five seconds.
Reading the Overview
The first tab shows a snapshot: how many keyword gaps, phrase gaps, and schema gaps were found, plus your word count versus the competitor average. If the word count delta shows a red minus number, your page is meaningfully shorter than the pages that rank. A green plus number means you already meet or exceed the competitor average.
Below that is a rich-feature table. It checks whether competitors use FAQ sections, HowTo markup, data tables, or three-plus lists — and whether you do too. These are rich-result eligibility signals, not just content devices, and the gaps here are usually the fastest wins.
Reading the Keyword Gaps Tab
This is the tab I use the most. The table shows phrases first (two-word combinations like "equipment financing") and then single words, sorted by how many competitors use each in their headings.
Every row has four columns:
- The keyword or phrase itself.
- How many competitors use it in a title or heading (something like "7/10").
- Whether the word appears in your body copy — "body only" means you mention it but not in a heading, "missing entirely" means you never say it.
- A priority tag: HIGH, MED, or LOW, calculated from how dominant the keyword is across the competitor set.
I look at the HIGH priority rows first. If six or more competitors put a phrase in their headings and I don't even mention it in my body, that's a content problem, not a keyword-stuffing problem. Google is telling me the topic I wrote about is not quite the topic it thinks this query is about.
A HIGH-priority gap with "body only" status is different — it usually means you're already covering the topic but you're burying it. Promoting that phrase into an H2 is often enough to change your impressions.
Reading the Heading Topics Tab
The Keyword Gaps tab tells you which words are missing. The Heading Topics tab tells you which sections are missing.
It pulls actual H2 headings from every competitor page and shows the ones that use topic tokens absent from your own H2s. The hostname column tells you which competitor the heading came from, so if one site dominates the topic you can click through and see how they structured it.
Don't treat this list as a blueprint to copy. Treat it as raw material for editorial planning. If four different competitors have an H2 about financing terms and you don't, the topic matters. If only one competitor has an H2 about a weird adjacent niche, you can safely ignore it.
Reading the Schema Tab
The Schema tab lists the JSON-LD types your competitors use that your page lacks. Each row includes a rich-result hint — what Google feature that schema type is likely to trigger.
FAQPage and BreadcrumbList are the two most common gaps I see. Both are quick to add. Article schema shows up everywhere content publishers rank, and if you're missing it, the other twelve structured-data checks the Site Analyzer runs are worth your attention too.
The bottom of the tab shows your own schema types as blue tags. If that section says "None detected," the schema gap you have is not "I should add FAQPage," it's "I should start from scratch with an Organization and WebSite block and work outward from there."
The Per-Site Raw Data Tab
Click into any of the competitor rows to see the extracted data: title, meta description, H1, first eight H2s, and the list of schema types detected. This is useful for two reasons.
First, it shows you the actual titles and headings your competitors use, not just the keywords extracted from them. A title like "Equipment Financing for Laundromats: Rates, Terms, and Approval in 48 Hours" teaches you something the keyword list alone cannot — the promise structure, the specificity, the expectation being set.
Second, it lets you sanity-check the fetch. If a row shows zero words and no schema, the fetch probably failed — often because the site blocks automated requests or renders its content with JavaScript. You can replace that URL with a different competitor and re-run. The cached pages stay on screen until you click Run again.
The AI Rewrite Prompt
The last tab is the output I actually paste into Claude or ChatGPT. It's a structured prompt that includes your current title, meta, H1, H2 list, and word count, the list of every competitor and their schema types, the full keyword and phrase gap list, the heading-topic gaps, the schema gaps, and instructions to deliver a rewritten title, meta description, H2 structure, JSON-LD, and body copy.
If you've got a skill level set on any of the jwatte.com tools — Beginner, Intermediate, or Advanced — the prompt is tuned to match. Advanced skips the explanations and gives you the rewritten blocks and JSON-LD. Beginner adds plain-English context. The level is shared with the Site Analyzer, the Batch Compare, and the E-E-A-T Audit so setting it once covers all of them.
Copy the prompt, paste it into your LLM of choice, and ask for the rewrite. I've found Claude tends to produce less inflated word counts than GPT — useful when the goal is to close a depth gap without padding.
Honest Limitations
A few things this tool does not do, because either Google blocks them or they belong in a different tool.
It does not fetch Google's SERP for you. Google detects and blocks scraping, and the free proxies that work for most sites do not work for Google search itself. You paste the top ten manually. A weekly paste takes sixty seconds.
It does not measure search volume. Volume is a separate concern that requires a keyword database like Ahrefs, Semrush, or a free alternative like Google Keyword Planner. Keyword Inspection tells you what the ranking pages actually use; volume tools tell you what people search for. You want both.
It does not render JavaScript. If a competitor serves a blank HTML shell and renders content client-side, the tool will show them with zero words and no schema. That's an honest fetch — that competitor genuinely does not serve anything useful to crawlers either. But it's useful to know it's a rendering issue rather than a truly empty page.
It does not track changes over time. Every run is a snapshot. If you want trend data, export the JSON after each run (there's a button next to the AI prompt) and diff them manually.
A Client Workflow That Fits in 90 Minutes
Here is how I use this on a paid engagement.
For each priority page the client wants to rank, I open Google Search Console (or ask them to share Looker Studio access) and find the query that page is getting the most impressions for — not the query they hope it will rank for, the one it already shows up for. Page-two impressions are the real intent signal. I run that query in an incognito window and copy the top ten organic URLs.
I paste them into Keyword Inspection, add the client URL, and run. I export the JSON immediately so there is a timestamped artifact for the engagement record.
I read the tabs in a specific order and pull three screenshots:
- Keyword Gaps tab — screenshot the HIGH priority rows. These become the "what we're adding" slide in the deliverable.
- Heading Topics tab — screenshot the competitor H2 list. This becomes the "new content outline" slide.
- Schema tab — screenshot the missing schema types. This becomes the "structured data work" line item in the scope.
Then I copy the AI rewrite prompt, paste it into Claude, and ask for the rewrite. I edit the output for the client's voice — the LLM always slides into bullet-point slop if I'm not paying attention — and ship it to the client as a tracked-changes Google Doc.
After the rewrite is published, I run the Site Analyzer on the new version so the handover note can say the Article-schema, @context, and mixed-content checks all pass. Thirty days later I check Search Console and write a one-paragraph note on movement.
Rankings move slowly. But in my experience, closing a real gap — not stuffing a keyword, but actually adding a section the ranking pages all have — moves the page up within two refresh cycles. If it doesn't, the gap wasn't the real problem, and that's useful information for the next conversation too.
The full methodology this sits inside — positioning a solo or micro-agency that delivers real SEO outcomes without a bloated tool stack — is covered in The $20 Agency.
The tool itself is free and needs no signup. Paste a search term and ten URLs and put a deliverable together before the next client call.