Summarize this article with AI
ChatGPT SEO prompts can ask the model for data you haven't supplied. Search volume. Keyword difficulty. Backlinks. Your own site's structure. Without a supplied dataset or an authorized connection, ChatGPT can fill those gaps with plausible guesses. Your "keyword list" may then contain confident numbers you can't verify.
This library takes a different angle. You'll find 18 prompts here, sorted by SEO task and matched to the Search Console or crawl export you need to paste. Every prompt names its output format, carries an instruction against invented metrics, and ends with a one-line check you can run against what you pasted. Three of them run on real Search Console data from two of our own sites, so you can see what a correct answer looks like before you trust your own run.
Pick a task, paste your data, run the check. Here's the full set.
ChatGPT SEO prompts at a glance: pick one by task
A ChatGPT SEO prompt is only as useful as the data in it. Your private Search Console data and crawl exports need to be supplied or connected. Web search can find public pages, but reported rankings and keyword metrics still need a named data source. A prompt needs more than a task name. Here, each prompt has a place for pasted rows, a required output format and an instruction against unsupported guesses.
It's a simple setup. Bring real data, specify the format and check the result yourself.
For the broader process, start with our ChatGPT for SEO workflow guide, which covers the brief, draft, FAQs and appearing in searches inside ChatGPT itself. This post is the task-by-task prompt library.
Quick-pick table. Jump to the prompt you need.
| # | Task | What you paste (and where it comes from) | What you get back | How you check it |
|---|---|---|---|---|
| 1 | Near-page-one queries | Queries export (query, clicks, impressions, position) | Rows at position 4 to 15 above your impressions floor, sorted | Row-count match in Sheets |
| 2 | Why not top 3 for one query | One query row + page title, H1, first 150 words + top-10 titles | Gaps between your page and what ranks, each tied to a quote | Every quote exists in the paste |
| 3 | Question queries to sections | Question-filtered queries + the page's H2/H3 list | Each question mapped to a heading or "not covered" | Spot-check three "covered" rows |
| 4 | Idea expansion, then your metrics | Step 1: topic. Step 2: your tool's columns | Prioritized list using only pasted columns | No number not in your paste |
| 5 | Title and meta rewrite | Current title and meta + the page's top queries | 3 titles and 3 metas with target query + char count | Count chars; each option names a pasted query |
| 6 | Coverage check | Page queries + full page text | Table: query, covered / partly / missing, the sentence | Search page for three quoted sentences |
| 7 | Answer paragraph | One question query + the section that should answer it | A 2 to 3 sentence answer using only existing facts | No new facts or numbers |
| 8 | Cliff or slow decay? | Monthly clicks per page (page by month) | Each page labeled, hypotheses with the test to run | Hypotheses, not verdicts |
| 9 | Visibility or clicks? | Query rows for before and after months | Impressions vs. position vs. clicks per group | Recompute one group's totals |
| 10 | Cannibalization | Query + page rows with clicks, impressions, position | Queries where multiple pages share impressions | Confirm one pair in Search Console |
| 11 | Internal link sources | Target page + your page list with clicks | 5 source pages with anchors from real queries | Every URL in your paste |
| 12 | Orphans and dead-ends | Crawl export of internal links + page list | Pages with no inbound or outbound links | Open two flagged pages |
| 13 | robots.txt review | robots.txt + must-crawl + should-block URL lists | Allowed or blocked per URL and the rule | Confirm in a robots.txt tester |
| 14 | hreflang return links | All hreflang tags from each version | Missing return links, bad codes | Open one flagged version's source |
| 15 | Redirect map | Old URLs with titles + new URLs with titles | One target per old URL, with confidence | Every target in the new list |
| 16 | Page indexing triage | Example URLs exported from the Page indexing report | Groups by reason and URL pattern | Spot-check two per group |
| 17 | Outreach prospects + pitch | Your unique asset + candidate pages with a quoted sentence | Fit score + 100-word pitch for top 3 | No metrics about their site |
| 18 | City queries vs. location pages | City-filtered queries + your location page list | Each city with impressions and the page that serves it | Filter one city in Search Console |
How to write SEO prompts for ChatGPT without trusting invented numbers
If the data your prompt needs never reaches ChatGPT, you can't verify its metrics. You still need a source for volume, difficulty, backlinks, current rankings and your competitor's traffic. Asking for 15 keywords, each with search volume and difficulty, still requires a data source. A prompt can hide the same demand behind words like "trending," "easy to rank," "low-competition" or "high-performing." Those labels still need evidence.
ChatGPT doesn't automatically have your Search Console data or a live keyword dataset. Connect a source or paste its export for those metrics. Web search can retrieve public pages, but that doesn't establish your private property data or complete current rankings. Without supporting data, the model may guess.1
Never ask ChatGPT to invent:
- Search volume or keyword difficulty
- Backlinks, referring domains, domain rating
- Current rankings or SERP positions
- Competitor traffic or market share
- Anything you haven't shared about your site, such as which posts exist, how pages link internally or how canonicals are set up
- Keyword labels like "trending," "underperforming," "low-competition" or "high-performing" without the metrics behind them
Put this instruction at the end of your prompt, then check whether the answer followed it:
Use only the data I pasted. If a value isn't in it, write "not in data".
Don't estimate search volume, difficulty, backlinks or rankings.
Bad prompt, then fixed
Consider this generic prompt: "Give me 15 high-performing, low-competition keywords for the topic of running shoes." ChatGPT may answer with convincing volume and difficulty figures that have no verifiable source. Treat them as missing data until you can trace them to a keyword tool.
Here's the same job, rewritten to run on your data:
You are a keyword analyst. I'm pasting rows from my keyword tool
(columns: keyword, volume, KD, parent topic, intent, CPC).
Return the 15 keywords with the lowest KD and volume >= [YOUR MINIMUM].
Output a table with: keyword, volume, KD, intent, parent topic.
Sort by KD ascending, then volume descending.
Keywords:
[PASTE: your keyword tool export rows]
Use only the pasted rows. Don't add keywords that aren't in the paste.
Don't estimate volume or KD for anything.
Three things changed. The prompt names a data source. It fixes the answer's format. And the guard line asks it to flag missing metrics. You still check that it followed the rule.
The three parts every prompt here has
- A data slot (
[PASTE: …]or[YOUR …]) that names the export and the columns. - An output spec: named columns, a JSON key list, or a specific row count.
- A one-line check so you can verify the answer against the paste.
Where the data comes from
Most prompts below feed on three sources. Keywords come from the Queries tab, while page data comes from the Pages tab. Set the date and search type filters there, in Google Search Console's Performance report.2 For internal links and canonicals, bring a crawl export from Screaming Frog, Sitebulb or the crawler you normally use. The page's own copy for on-page work.
Search Console's in-browser export caps at 1,000 rows; larger sites can have more rows than the export includes.3 For ways to get beyond the in-browser row limit, see our bulk Search Console export guide. Anonymized query strings can still be omitted.4 Before you paste a big export, trim it. To choose which queries ChatGPT sees from a large export, use the filters in our Search Console regex cheat sheet.
Your paste needs only the requested columns, plus the property, date range and any filters behind the export. That context helps ChatGPT give you a more useful answer.
ChatGPT prompts for keyword research from your Queries export
Export the Search Console Queries tab for your chosen property, date range and search type.2 That file feeds all these SEO prompts for ChatGPT.
Prompt 1: Near-page-one queries. Use this to find the queries sitting just below the top results, where a better page can win clicks. Use a recent window for the Queries export; 90 days works well.
You are a Search Console analyst. I'm pasting rows from the
Queries tab (columns: query, clicks, impressions, position).
Property: [YOUR PROPERTY]. Date range: [YOUR RANGE]. Search type: web.
Return only rows where position is between 4 and 15 and
impressions >= [YOUR MINIMUM]. Sort by impressions descending.
Add a column "what to check on the ranking page" with one of:
title tag, intro paragraph, H1 and subheads, internal links in, schema.
Queries:
[PASTE: Queries export rows]
Use only pasted rows. Don't estimate position. If a row doesn't meet
the filter, drop it. If none meet the filter, say so.
Check: Sheets should give you the same row count when you filter those rows to position 4 to 15 and impressions at or above your floor. A longer list is a sign the model skipped that constraint.
Prompt 2: One query, why not top 3. Take one query close to page one and work out what's missing. You'll need more than its row for that.
You are an on-page SEO reviewer. Here's one query and my page.
Also here are the top 10 titles and URLs from Google for that query
(I copied them from the results page myself).
Return a table: gap, where it shows up (title / H1 / intro / body),
quote from the top-10 titles that supports the gap. One row per gap.
Max 7 rows.
Query row: [PASTE one row: query, clicks, impressions, position]
My page title: [YOUR TITLE]
My page H1: [YOUR H1]
First 150 words of my page: [PASTE]
Top 10 titles and URLs (position: title | URL):
[PASTE]
Use only what I pasted. Don't invent competing pages or titles.
Don't rank or estimate domain authority.
Check: every quote in the answer must appear verbatim among the top-10 titles you pasted. If one doesn't, the model made it up.
Prompt 3: Question queries to sections. Match your page's headings with queries that ask questions (what, why, how, can, is, does). For the regex, see our Search Console regex cheat sheet.
You are a content auditor. Match each question query to the heading
that answers it on my page, or "not covered" if nothing does.
Return a table: question query, impressions, matched heading, status
(covered / partly / not covered), one-line reason.
Question queries (filtered by regex ^(what|why|how|is|can|does|should)):
[PASTE: filtered Queries rows]
Page headings (H2, H3 list in order):
[PASTE]
Use only pasted headings. Don't invent sections my page doesn't have.
If a question is partly covered, say which heading and what's missing.
Check: find three rows marked "covered" and verify them on the page itself. The heading needs to answer the question plainly, or that row deserves a downgrade.
Prompt 4: Idea expansion, then your metrics. Use ChatGPT to brainstorm keyword ideas without assigning metrics to them. Ahrefs, Semrush, Moz or another tool with a search index should handle the resulting list. Then paste those tool rows into ChatGPT.
Step 1 (ideas only, no metrics):
Give me 30 related keyword ideas for the topic [YOUR TOPIC].
Include long-tail phrasings and question forms.
Output format: a single bullet list of keywords, nothing else.
Don't add volume, difficulty, intent or any ranking signal.
Step 2 (after I run them through my keyword tool and paste the rows):
Here are those keywords with real metrics from my tool
(columns: keyword, volume, KD, parent topic, intent).
Prioritize by volume >= [YOUR MINIMUM] and KD <= [YOUR MAX].
Rows:
[PASTE]
Use only pasted rows. If a keyword from step 1 isn't in the paste
(the tool had no data), drop it. Don't estimate volume or KD.
Check: scan the output for any number that isn't in your paste. There shouldn't be any.
Worked example: a young site's Queries export
Here's what Prompt 1 looks like on real data retrieved through SEO Heatmap's MCP connection on October 7, 2026. The queries below brought clicks to getseoheatmap.com during September 2026. These are Search Console query metrics: clicks, impressions and average position.2 For your own run, export the Queries tab in Search Console to get all three columns.
| Query | Clicks | Impressions | Position |
|---|---|---|---|
| seo heatmap | 2 | 55 | 9.6 |
| heatmap seo | 3 | 15 | 6.2 |
| seo heatmaps | 2 | 8 | 13.3 |
Here, a query needs at least 20 impressions. Prompt 1 should return seo heatmap and nothing else, a single row. heatmap seo has the better position (6.2), though its 15 impressions are too few to qualify. Getting two or three rows back tells you ChatGPT ignored that filter. The row-count check catches it on the first try.
Honest note on young sites. The queries that earned our site a click added up to 7 clicks and 78 impressions in September 2026, and page-level clicks were 12, most of them to the homepage. Start with Prompts 1 and 2 plus Prompt 6, supplying the page copy and search-result titles each asks for. The other tasks need different inputs: query/page pairs for cannibalization, monthly page history for traffic patterns, and a crawl of internal links for orphan analysis. Choose by the data available, rather than an arbitrary minimum row count.
On-page prompts: titles, metas, and coverage from real queries
Rewrite a page from the queries it already shows for, not from a keyword guess.
Prompt 5: Title and meta rewrite from the queries a page already gets. Feed it from the Performance report: filter to one page, then export the Queries tab. You get the queries that URL is shown for, with clicks, impressions and position.
You are an on-page SEO copywriter. I'm rewriting one page's title
and meta description from the queries it actually gets.
Give me 3 titles and 3 descriptions. For each option, list:
- the target query from the paste it leans on
- the character count
Keep titles at or under [YOUR TITLE CAP] characters.
Keep descriptions at or under [YOUR DESC CAP] characters.
Match US English. No colons at the end. No exclamation marks.
Current title: [YOUR TITLE]
Current meta: [YOUR META]
Page URL: [YOUR URL]
Queries for this page (query, clicks, impressions, position):
[PASTE]
Use only pasted queries for the target. If a query isn't in the paste,
don't use it. Don't estimate CTR impact.
Check: count characters yourself in Sheets (LEN()). Then confirm each option's target query is one of the rows you pasted.
Prompt 6: Coverage check against real queries. Does the page actually answer what it's shown for? Paste the page copy and its queries.
You are a content auditor. For each query, say whether the page
covers it, partly covers it, or misses it.
Output a table: query, impressions, status, the sentence from the
page that covers it (empty if missing).
Queries for this page: [PASTE]
Full page text (headings and body):
[PASTE]
Use only sentences that appear verbatim in the page text.
Don't paraphrase. If no sentence covers the query, write "not in page".
Check: take three "covered" rows and search the live page for the quoted sentence. If the live page has changed, check the exact text you supplied. A quote absent from that supplied text was paraphrased or invented.
Prompt 7: Answer paragraph for a question query. If the page only half-covers a question query at position 4 to 15, write the answer right there.
You are an on-page SEO editor. Rewrite the section below so it opens
with a direct 2 to 3 sentence answer to the question query.
Rules:
- Use only facts, numbers and claims already in the section.
- Don't add new facts, tools, examples or stats.
- Return: the new answer paragraph, then the exact sentence it replaces.
- Keep the voice of the surrounding section (I'll paste it for context).
Question query: [YOUR QUERY]
Section HTML or markdown: [PASTE]
First 150 words of the full page (for voice context): [PASTE]
If a fact isn't in the section, don't use it. If the section can't
answer the query, write "section is missing facts" and list what's needed.
Check: put the replacement paragraph next to the original and read both. Any new fact, number or claim gets cut.
In practice: pull a page's queries before you touch its title. Often the query you'd have written for isn't the one bringing impressions.
Content audit prompts for traffic drops, decay and cannibalization
Traffic-drop prompts need to distinguish patterns from causes. Asking for "likely causes" can invite conclusions the data doesn't establish. The data can't tell you cause from timing alone. It can tell you shape.
Prompt 8: Cliff or slow decay? Feed monthly clicks per page. Put pages down the rows and give each month its own column. SEO Heatmap's clicks heatmap gives you this layout and exports to Sheets or Excel. With Search Console, you'll need the Pages tab for each month.
You are a traffic-decline analyst. For each page in the data, label it
and group the pages by when they fell.
Labels: cliff (dropped to 0 or near 0 in one or two months after
a peak), slow decay (steady decline across 3+ months), seasonal
(repeating up and down with the calendar), steady (no clear trend).
For pages labeled cliff or slow decay, group by the month the drop
started. For each group, list 2 to 3 hypotheses for the cause,
and for each hypothesis the test that would confirm or rule it out
(a report to check, a URL to fetch, a date to compare).
Don't name a cause as confirmed. Say "hypothesis" and "check".
Data (page by month, monthly clicks):
[PASTE]
Use only pasted months and pages. If a page has fewer than
3 months of data, label it "insufficient data".
Check: every proposed cause needs the words "hypothesis" and "check" in the output. An answer that says "the cause is …" needs to go back.
Prompt 9: Visibility or clicks? When Prompt 8 spots a drop, use this to see if impressions fell, positions slipped or only clicks fell. If clicks fall while impressions and average position stay steady, investigate CTR: check the title, snippet and what else now appears in the search results.
You are a Search Console analyst. Compare two periods for the same
set of queries. Say what changed: impressions, position, or clicks
at the same position.
Output per query group: before clicks / impressions / avg position,
after clicks / impressions / avg position, change label
(lost impressions / lost positions / lost CTR / mixed).
Before (query, clicks, impressions, avg position):
[PASTE]
After (same columns):
[PASTE]
Use only pasted rows. If a query is in only one period, say so.
Don't estimate what caused the change.
Check: work out the totals yourself for one of the groups. The sums must match.
Prompt 10: Cannibalization from query-page pairs. Grouping Search Console data by query and page shows which URLs received impressions for each query.5 Use the Search Analytics API or a bulk export to collect both dimensions (see our bulk Search Console export guide).
You are a cannibalization analyst. Find queries where two or more
of my pages get impressions in the same period.
Output a table: query, total impressions, pages (URL | impressions | %
share | avg position), note (same intent? different intent? check).
Only include queries with 2+ pages at >= [YOUR IMPRESSION FLOOR] each.
Sort by total impressions descending.
Rows (query, page, clicks, impressions, position):
[PASTE]
Use only pasted pages. If a URL isn't in the paste, don't add it.
Don't rank one page as the "correct" winner; flag for human review.
Check: use a query from the answer as a filter in Search Console. Then view the Pages tab. Match the property, date range, search type and filters before comparing. The API does not guarantee all data rows, so investigate missing data before treating a discrepancy as a model error.5 When a merge looks right, our thin content SEO guide covers how to decide which page keeps the URL.
Worked example: a running blog we own, September 2025 cliff
This is a real site. Site-wide clicks went from 91 in July 2025 to 97 in August to 31 in September, then down to 0 by August 2026. We won't name it, and the page topics below are paraphrased.
Partial input table (monthly clicks, July 2025 at the left). These five pages brought in about half of the site's clicks in July and August 2025:
| Page (topic) | 07/25 | 08/25 | 09/25 | 10/25 | 11/25 | 12/25 | 01/26 | 02/26 |
|---|---|---|---|---|---|---|---|---|
| how long to run 3 miles | 11 | 10 | 2 | 0 | 0 | 0 | 0 | 0 |
| how long to run 12 miles | 8 | 5 | 0 | 0 | 0 | 0 | 0 | 0 |
| chewing gum while running | 18 | 10 | 0 | 0 | 0 | 0 | 0 | 0 |
| average marathon time | 5 | 9 | 8 | 16 | 6 | 2 | 2 | 1 |
| average mile time | 4 | 13 | 8 | 3 | 3 | 1 | 0 | 1 |
A correct answer to Prompt 8 picks out two shapes. The "how long to run N miles" family and the "chewing gum while running" page are cliffs: within one or two months of each other, starting in September 2025, they lost all their clicks. When a whole page family goes dark at once, check shared site-level or template-level changes without assuming they caused the drop. Possible hypotheses include a template change, a canonical flip, a robots.txt edit, a widespread status flip to "Crawled - currently not indexed" (see our guide to "Crawled - currently not indexed"), or a wide position slide from an update. The "average X time" pages are slow decays: they peaked between August and October 2025 (the mile page in August, the marathon page in October), then bled out. The right output lists the hypotheses with the check each one needs. It does not say "the cause is."
Now Prompt 9 on the same site. The saved MCP dataset covers 73 queries that had at least one click during its 16-month window. Within that tracked set, impressions fell from 1,532 in August 2025 to 74 in September, while the average position of the remaining impressions barely moved (17.0 to 15.9). Several "how long to run N miles" queries recorded positions 6.5 to 10.8 in July and August, and had no recorded impressions in September 2025. Some reappeared in later months. This shows a sharp loss of recorded visibility. It doesn't establish why it happened: the stable average covers only the remaining impressions, so ranking losses among the queries that disappeared are still possible. Check query/page history and indexing before choosing a cause.
One more pattern worth seeing in the same tracked query set. Impressions came back in June and July 2026 (161 and 248), but at average positions of about 52 to 56, with 0 to 1 clicks. That is not a recovery. The prompt should say so.
That site's saved query-level and page-level data also have a gap in clicks: 23 versus 91 in July 2025, then 31 versus 97 in August. For privacy, Search Console omits rare queries from the Queries table. In this case, roughly two-thirds to three-quarters of the page-level clicks were absent from the exported query rows. Anonymized-query clicks can still appear in chart totals when no query filter is applied.6 A drop prompt fed only the Queries export misses most of the traffic. Feed Prompt 8 the Pages data too.
Internal linking prompts that pick links by data
An internal-links prompt needs your page list; otherwise, it can invent URLs or select pages by topic without traffic data. Here's how to make it pick by data.
Prompt 11: Link sources for a page you want to push. Pair this with Prompt 1's output: the near-page-one page is often the best push target. Feed a page list with 90-day clicks.
You are an internal-links strategist. I want to push one target page.
Pick 5 source pages from my list that are topically related and have
real traffic. For each source, give the paragraph topic to link from
and anchor text drawn from the target page's actual queries.
Target page: [YOUR URL]
Target page title: [YOUR TITLE]
Target page's top queries (query, clicks, impressions):
[PASTE]
My page list (URL, title, 90-day clicks):
[PASTE]
Output table: source URL, source title, 90-day clicks, paragraph
topic, anchor text, which target query the anchor leans on.
Use only pages from my list. Don't invent URLs. Don't score authority.
If fewer than 5 pages fit, return fewer and say why.
Check: every URL in the output must appear in the list you pasted. If one doesn't, cut it.
Prompt 12: Orphan and dead-end check. Use a crawl export of internal links (source URL to target URL) plus a separate page inventory from your CMS or sitemap. The inventory must include URLs the crawl did not discover. Crawl those URLs separately to collect their outbound links before treating a missing link row as a dead end.
You are a crawl analyst. From the internal-links export and the
page list, find:
- pages with no inbound internal links (orphans)
- pages with inbound links but zero outbound links to related pages
- pages with 90-day clicks but no outbound internal links at all
Output three tables, one per category. Columns: URL, title, inbound
count, outbound count, 90-day clicks.
Internal links (source URL, target URL):
[PASTE]
Page list (URL, title, 90-day clicks):
[PASTE]
Use only pasted URLs. If a URL in the links isn't in the page list,
drop it. Don't flag external links.
Check: open two flagged pages and look at the live internal links. The counts should roughly match what you see on the page.
Technical SEO prompts: review what you paste
Technical SEO prompts should read files you already have, not write config from scratch. Here are three checks of files you paste and one triage of a Search Console export.
Prompt 13: robots.txt against your URL list.
You are a crawl engineer. Here's my robots.txt and two URL lists.
For each URL, say whether it's allowed or blocked for Googlebot
and the rule that decides it (quote the rule verbatim).
Output table: URL, expected (crawlable / blocked), actual
(allowed / blocked), rule, match or mismatch.
robots.txt:
[PASTE]
Must be crawlable:
[PASTE: one URL per line]
Should be blocked:
[PASTE: one URL per line]
Use only rules from the pasted robots.txt. If a URL matches no rule,
say "allowed by default". Don't invent directives.
Check: before you change anything, run each mismatched URL through URL Inspection in Search Console, which reports whether robots.txt blocks crawling.7
Prompt 14: hreflang return links. Paste the hreflang block from each language version of one page. Google Search Central says hreflang tags are ignored when two alternate pages do not point back to each other.8
You are an international SEO reviewer. Check that every version
links back to every other version and to itself, and that language
and region codes are valid (ISO 639-1 language, optional ISO 3166-1
alpha-2 region, or x-default). Letter case doesn't matter.
For each version, list:
- missing return links to other versions
- missing self-reference
- malformed language-region codes
Hreflang tags per version (version URL + its hreflang block):
[PASTE]
Use only tags from the paste. Don't guess which versions should exist.
Don't flag return links to versions I didn't paste.
Check: open one flagged version's HTML and confirm the missing or malformed tag is actually there (or actually isn't).
Prompt 15: Redirect map for a migration. Paste old URLs with titles and new URLs with titles. Keep this one strict.
You are a migration planner. Build a redirect map from the old
URLs to the new ones. For each old URL, pick the single best match
or write "no good match" if nothing fits.
Rules:
- Match on title similarity and URL slug structure.
- Each old URL gets exactly one target. Several old URLs may share
the same new URL.
- Never invent a target URL. If no match, write "no good match".
Old URLs (URL, title):
[PASTE]
New URLs (URL, title):
[PASTE]
Output table: old URL, new URL (or "no good match"), confidence
(high / medium / low), reason (one line).
Use only URLs I pasted on each side.
Check: search the output for every target URL. It must appear in the new-URL paste. If one doesn't, the model invented it.
Prompt 16: Page indexing report triage. In Search Console's Page indexing report, open each reason you care about and export its example URLs.9 Combine the exports into one sheet with the reason as a column.
You are an indexing analyst. Group the pages by reason and URL
pattern. For each group, give the next check.
Input rows (URL, reason, last crawled):
[PASTE]
Output per group: reason, URL pattern (regex or path prefix),
page count in the group, example URL, next check (one line).
Use only pasted rows. Don't estimate how many pages fit a pattern
beyond what's in the paste. Flag groups that need a different
diagnosis in a separate row.
Check: for each group, open two example URLs and run URL Inspection in Search Console. Compare the reported reason, crawl dates and inspection mode. A live test can differ from the indexed report, and it does not evaluate every indexing condition.7 For the "Crawled - currently not indexed" bucket in particular, our guide to that status walks the next checks.
Link outreach and local SEO prompts
Both tasks run on files you already have: outreach research and a location-page inventory.
Prompt 17: Outreach prospects and the pitch. The asset is yours (a data point, a table, an original teardown). The candidate pages are ones you already found in a search; copy one sentence from each.
You are a link-outreach editor. From the candidate pages, score
each one for fit. Then write a 100-word email for the top 3.
Scoring: look at the sentence I pasted and judge whether my asset
would naturally fit as a reference, an example, or an update.
Output per candidate: URL, fit score (1 to 5), reason (one line).
For the top 3 only, write a 100-word email that quotes the
sentence I pasted and offers my asset. No flattery. No subject line
longer than 7 words.
My asset (what it is + the one unique data point or claim):
[PASTE]
Candidates (URL + one sentence I copied from the page):
[PASTE]
Use only the sentences I pasted. Don't mention metrics about their
site (DR, traffic, authority). Don't invent what else is on their page.
Check: read each email and remove any claim about the recipient's site that wasn't in the sentence you pasted.
Prompt 18: City queries vs. your location pages. Filter the Queries export with a regex of your city or area names. Then paste your location pages. Our Search Console regex cheat sheet has an "or"-chain pattern you can adapt.
You are a local SEO auditor. Match each city query to the location
page that should serve it, or flag "no page" if nothing fits.
Output table: city, query (one example), impressions, matched page
URL (or "no page"), action (align page / build page / merge).
City queries (query, clicks, impressions, position, after regex filter):
[PASTE]
Location pages (URL, title, served city or area):
[PASTE]
Use only cities visible in the pasted queries and only pages from
my list. Don't invent location pages. Don't rank cities by population.
Check: filter one of the output cities in Search Console and switch to the Pages tab. Check which pages receive impressions for that query and whether the intended location page is among them. Review the other pages before deciding to align, build or merge.
Skip the copy-paste: run these prompts on connected data
Pasting exports takes time, especially when you need to trim a large file. A connection lets ChatGPT or Claude retrieve the Search Console inputs it supports without manual pasting. Ask for only the rows, columns and date range the task needs: connected data still has to fit the model's context window. A 2024 TACL study by Liu et al. found that the tested language models performed significantly worse when relevant information appeared in the middle of long inputs.10
SEO Heatmap connects Claude and ChatGPT to your Google Search Console clicks and keywords through MCP. It's free for one Search Console property. For the set-up options and what to use when, see our Google Search Console MCP guide and our SEO MCP guide. If you've picked Claude as your assistant, the Claude SEO workflows guide runs through the same jobs with connected data.
For prompts whose inputs your connection can retrieve, drop the [PASTE: …] slot and name the property, the date range, and the filters in the prompt. Keep the guard line. A missing metric is still a missing metric when it comes through MCP. Supply page copy, crawl data, robots.txt and hreflang separately unless another connection provides those inputs.
Get the data these prompts need
You might need a Queries tab or Pages tab export, page-by-month data or a crawl file, depending on the prompt. The clicks heatmap in SEO Heatmap lets you view each page by month (16 months) or by week (16 weeks). The Keywords tab shows clicks or average position, one metric at a time. Use Search Console's Queries table when a prompt needs impressions or CTR. Exports to Sheets and Excel have no 1,000-row cap, and you get URL and growing-or-falling filters plus an MCP connection to Claude or ChatGPT. It's free for one property. Start there if getting clean data to the model is what's holding you up.
Frequently asked questions
Can I do keyword research in ChatGPT without a keyword tool?
ChatGPT can brainstorm related topics, long-tail phrasings and question versions of a topic without a keyword tool. To prioritize them by search volume, difficulty or a "low competition" label, supply measurements from a keyword tool or a connection to one. In Prompt 4, you generate ideas without numbers; prioritizing comes afterward, using the columns returned by your keyword tool.
Why does ChatGPT give me search volumes when I haven't supplied them?
ChatGPT can guess when the prompt leaves gaps. Put the guard line last: ask it to use only pasted data, write "not in data" for anything missing, and avoid estimates of volume, difficulty, backlinks or rankings. This is an instruction, not proof that the answer is accurate. Compare every reported metric with your input.
Do these prompts work in Claude or Gemini?
Yes. You can carry these prompts between models because the column names and final check are just plain text. Keep the guard line, too: any model needs pasted data or a connection before it can read your Search Console or crawl. If you work in Claude, the Claude SEO workflows guide linked in the article covers the same jobs with connected data.
How much data from Search Console should I paste?
Keep the paste to columns the prompt needs and rows that meet its filter. A near-page-one paste should contain only queries at position 4 to 15 that also meet your impressions floor. If regex doesn't shrink a large export enough, split the remaining rows across two or three messages. Forget a fixed row cap. Cut the paste in half when the model stops reading or gives you a summary instead.
Are these prompts safe for SEO when writing content?
You're checking and editing copy with these on-page prompts, so don't ask them to ghostwrite an entire article. Compare your queries with the page in Prompt 6. Prompt 7 asks for a one-paragraph rewrite using facts the page already contains. Prompt 5 asks for titles based on supplied queries. Check that both outputs follow those constraints. Knowing if AI wrote it won't tell you much. What counts is accuracy and giving readers information they actually need.
How do I check ChatGPT's SEO output before using it?
Match reported metrics to your input, and recompute derived totals or character counts. An invented URL can slip past you, so match every address to the list you supplied. Quotes need an exact match, too: compare each sentence with the page copy you shared. The check at each prompt's end tells you which of these three tests to use.
Can I run these prompts without pasting exports?
For Search Console prompts, yes, if ChatGPT or Claude has a connection that supplies the required data. Name the property, date range and filters, and ask it to retrieve those inputs. Page copy, crawl data, robots.txt and hreflang still need to be supplied if the connection doesn't provide them. Keep the guard line and check the result.
SEO Heatmap puts monthly clicks for every page beside your query data; you can export both or read them directly into ChatGPT or Claude. You can spend time on the prompts instead of preparing exports. It's free for one Search Console property.
Sources (10)
SEO Heatmap Knowledge relies on primary sources: Google's documentation, web standards, peer-reviewed research, and vendors' own pages for their pricing and features. Our editorial standards
- OpenAI. “Does ChatGPT tell the truth?”
- Google Search Console. “Performance report (Search results): Overview and basic setup.”
- Google Search Console. “Export data directly from a Search Console report.”
- Google Search Central. “Bulk data export: a new and powerful way to access your Search Console data.”
- Google Search Console. “Search Analytics: query.”
- Google Search Central. “A deep dive into Search Console performance data filtering and limits.”
- Google Search Console. “URL Inspection tool.”
- Google Search Central. “Tell Google about localized versions of your page.”
- Google Search Console. “Page indexing report.”
- Liu et al., TACL 2024. “Lost in the Middle: How Language Models Use Long Contexts.”