The Exact Claude AI Prompts I Use to Generate 500 Local SEO Pages
Manual page writing doesn't scale. These 5 Claude AI prompts for local SEO pages are the exact templates I use to generate 500+ location pages that rank — with full templates, placeholders, and QC process included.
SEOHQ
March 28, 2026
There are two ways to build a 500-page local SEO campaign. You can write each page by hand — budget 2–3 hours per page, hire a writer at $50–80 per piece, and watch the project take six months and $30,000 to finish. Or you can build a prompt system that produces genuinely useful, unique, rankable content at a fraction of the time and cost.
The people still choosing option one aren’t being careful. They’re being slow.
AI-generated content for SEO gets a bad reputation because most people do it wrong. They use a single vague prompt, get back generic output, and publish 500 near-identical pages with different city names pasted in. Google crawls those, flags thin or duplicate content, and either ignores the pages entirely or penalizes the domain. That outcome isn’t the fault of AI — it’s the fault of a lazy prompt strategy.
The difference between AI content that ranks and AI content that gets ignored comes down to how specifically you define the task. A well-engineered prompt gives Claude the constraints, the structure, the tone, the geographic context, and the output format it needs to produce something a human editor would actually be proud of. A weak prompt gets you filler.
This post covers the five Claude AI prompts for local SEO pages that I use in every programmatic build. Full templates, placeholder conventions, what each prompt is designed to do, and why it works. Plus the QC process and batch scaling approach that makes deploying 500 pages practical.
Why AI Prompts Beat Manual Writing for pSEO
The argument for AI in programmatic SEO isn’t about cutting corners — it’s about matching the right tool to the task.
When you’re writing a 500-word location page for a plumber in Chandler, AZ, the creative challenge is low. The structure is known. The intent is clear. The information required is predictable. What varies is the specific geography, the local context, and the way those elements are woven into copy that doesn’t read like a template. That variation is exactly what Claude handles well.
A skilled human writer would produce better output on a single page. But they can’t produce consistent output across 500 pages without degradation in quality, attention, and coherence. Claude can. Feed it the right prompt and 500 data rows, and the 500th page comes out as clean as the first.
The other practical advantage is iteration speed. If a client changes their service offering, rebrands, or wants to reposition their messaging, you update one prompt and regenerate. With manually-written pages, that change becomes a content audit, a rewrite project, and a budget conversation.
The 5 Prompts
These prompts use a consistent placeholder convention: [ALL_CAPS] fields are replaced with your data at generation time. Most fields come directly from your location CSV.
Prompt 1: Full Page Body Generator
This is the core prompt. It generates the main content block for a single location page — the opening paragraph, services section, service area context, and call to action.
You are writing the main content section for a local service business landing page.
This content will live on a dedicated city-specific page on their website.
Business Name: [BUSINESS_NAME]
Business Type: [BUSINESS_TYPE]
Primary Service: [PRIMARY_SERVICE]
Target City: [CITY]
Target State: [STATE]
Phone Number: [PHONE]
Staff/Owner Name: [OWNER_NAME] (use "our team" if unknown)
Write the following four sections in order. Use plain text — no markdown headings,
no bullet symbols, no HTML. Each section is a paragraph.
Section 1 — Opening (2–3 sentences): Establish relevance to [CITY] specifically.
Do NOT open with the business name. Lead with the customer's problem or need.
Use [CITY] naturally once or twice. Do not keyword stuff.
Section 2 — Services (3–4 sentences): Describe the top services offered, framed
as solutions to problems a [CITY] homeowner or customer faces. Be specific.
Avoid generic phrases like "wide range of services" or "second to none."
Section 3 — Local Context (2–3 sentences): Reference something real and specific
about [CITY] or the surrounding area that connects to the service need.
Mention 1–2 actual neighboring cities in [STATE] that you also serve.
Section 4 — Call to Action (1–2 sentences): Direct, confident CTA to call [PHONE].
Do not use passive language like "feel free to" or "don't hesitate."
Total length: 220–280 words. Tone: professional but conversational.
Sound like a real local business owner, not a marketing agency.
What makes this work: The four-section structure prevents Claude from free-styling into generic content. The instruction to not open with the business name forces a customer-centric opening. The local context section is where most AI-generated pages fail — by specifically asking for real neighboring cities and genuine local relevance, you get copy that passes the human-reading test.
One important note: validate the neighboring cities Claude generates. It occasionally invents plausible-sounding but incorrect geography. Run a quick check for your first batch and add a correction note to your prompt if needed.
Prompt 2: Local Context Generator
This is a supplemental prompt used to generate richer, more location-specific content for high-priority pages — typically your top 20–30 city targets where you want extra depth.
You are writing a locally-relevant content paragraph for a [BUSINESS_TYPE] business
targeting customers in [CITY], [STATE].
Write a single paragraph (4–6 sentences) that:
- References something specific and real about [CITY] that connects to [PRIMARY_SERVICE]
(e.g., local climate, housing stock age, infrastructure, demographics, common property types)
- Explains why this makes [PRIMARY_SERVICE] particularly relevant or in-demand in [CITY]
- Does not name-drop tourist attractions or landmarks unless they're genuinely relevant
- Reads like informed local knowledge, not a Wikipedia summary
- Does NOT mention the business by name
This paragraph will be inserted into a landing page after the main services description.
Length: 80–120 words. Tone: informative, grounded.
What makes this work: Most pSEO pages treat local context as decoration — dropping a city name five times and calling it localized. This prompt generates copy that actually explains why the service matters in that specific location. A Phoenix HVAC page that mentions the 110°F summer heat driving demand for emergency AC repair is more useful and more unique than one that just says “serving Phoenix and surrounding areas” repeatedly.
Use this prompt for your priority pages and reserve the standard Page Generator for the full long tail.
Prompt 3: FAQ Generator
FAQs add content depth, improve time-on-page, and are strong candidates for Google’s featured snippet positions. They also help pages answer the full range of intent signals around a query — not just “plumber in Chandler” but “how much does a plumber cost in Chandler” and “what should I do before the plumber arrives.”
Generate 4 FAQ items for a local [BUSINESS_TYPE] landing page targeting [CITY], [STATE].
Requirements:
- At least 2 questions must reference [CITY] by name
- Questions should reflect real things people search for or ask about [BUSINESS_TYPE]
services — draw from common service anxieties, pricing questions, timing, and
what to expect
- Do NOT include questions about whether you're licensed or insured (too generic)
- Answers must be 3–5 sentences, specific, and useful — not vague reassurances
- One answer should mention [PRIMARY_SERVICE] directly
- Do not answer any question with "it depends" without immediately explaining
what it depends on
Output format — repeat exactly for each FAQ:
Q: [question]
A: [answer]
What makes this work: The “do not answer with ‘it depends’ without explaining” instruction eliminates Claude’s most annoying evasion pattern. The specificity requirements — naming the city, tying at least one answer to the primary service — prevent the output from being interchangeable with any other city’s FAQ block.
Prompt 4: Meta Title and Description Generator
Title tags and meta descriptions are small but high-leverage. A well-written title improves click-through rate from search results, which compounds over time into more traffic and stronger ranking signals. Most pSEO builds treat these as an afterthought and generate formulaic titles that all look the same in SERPs.
Generate a unique SEO title tag and meta description for a local service business
landing page with the following parameters:
Business Type: [BUSINESS_TYPE]
Primary Service: [PRIMARY_SERVICE]
City: [CITY]
State: [STATE]
Business Name: [BUSINESS_NAME]
Key Differentiator: [DIFFERENTIATOR] (e.g., "24/7 emergency service",
"family-owned since 1998", "same-day appointments")
Requirements:
Title tag:
- 52–60 characters including spaces
- Lead with the primary keyword naturally
- Include [CITY], [STATE] abbreviation
- Include [BUSINESS_NAME] or a shortened version if space allows
- Do NOT use pipes (|) between every element — write it as a readable phrase
when possible
Meta description:
- 148–158 characters including spaces
- Include [CITY] and [PRIMARY_SERVICE]
- Lead with a benefit or differentiator, not "Welcome to" or "We are"
- End with a soft CTA (e.g., "Call today", "Get a free estimate", "Book online")
- No keyword stuffing — read it aloud and it should sound natural
Output format:
TITLE: [title tag]
META: [meta description]
What makes this work: The character count constraints are hard limits, not suggestions — include them and Claude will respect them. The instruction to avoid pipes and write readable phrases produces titles that stand out in SERPs instead of blending into the formatted-metadata look of every other local SEO page. The differentiator field is the key to unique descriptions — without it, every city gets the same generic meta copy.
Prompt 5: Internal Link Anchor Text Generator
Internal linking is the connective tissue of a pSEO build. Done well, it distributes page authority, signals topical clusters to Google, and improves crawl efficiency. Done lazily (every link says “click here” or uses the exact same keyword phrase), it looks manipulative and adds no value.
Generate 6 internal link anchor text variations for a link pointing from a
[BUSINESS_TYPE] location page to the [TARGET_PAGE_TYPE] page for [LINK_TARGET_CITY], [STATE].
The linking page is for: [SOURCE_CITY]
The target page covers: [LINK_TARGET_CITY]
Requirements:
- Vary between: exact match keyword, partial match, natural editorial phrasing,
and location-only anchors
- No anchor should exceed 7 words
- All anchors should read naturally in the context of editorial body text
- Do not repeat the same anchor structure twice
- Avoid "click here", "learn more", "read more" as anchors
Output: 6 anchor text options, one per line. No numbers, bullets, or labels.
What makes this work: Six options per link gives you enough variety to avoid over-optimizing anchor text ratios across 500 pages. The instruction to vary anchor types — exact match, partial, natural — mirrors the link profile of legitimately-linked content. Run this prompt for each city pair you’re building location-to-location links between.
Common Mistakes That Kill AI Content in Local SEO
Publishing without reading. No QC step at all. The output looks plausible at a glance, gets published, and turns out to be full of hallucinated neighboring cities, wrong service descriptions, or a phone number repeated in every paragraph.
Identical sentence openings. Claude defaults to certain sentence structures when left unconstrained. If 200 pages open with “When it comes to [service] in [city]…” Google notices the pattern. Add an explicit instruction: Do not begin the opening paragraph with "When it comes to" or any gerund phrase.
Thin FAQ answers. The prompt above prevents this, but if you don’t specify minimum answer length and depth requirements, Claude produces FAQ answers that are two sentences of reassurance and nothing else.
Missing or wrong schema. Schema markup isn’t generated by these prompts — it comes from your template. Make sure your LocalBusiness schema is populated per-page with accurate NAP, not pulled from a single static block that applies to every location page.
Over-optimizing the H1. “Emergency Plumber in Chandler AZ | Licensed & Insured | Same Day Service” is not a heading — it’s a keyword list. The H1 should be readable. “Emergency Plumber in Chandler, AZ” is enough.
QC Process Before You Publish
Before deploying your full build, run every page through this five-point check:
1. Neighbor city validation — open 20 random pages and verify the neighboring cities mentioned are real and geographically accurate. Fix any hallucinations and add a correction note to your Local Context prompt.
2. Phone number consistency — confirm the phone number appears correctly and only where it should. Spot-check 10 pages. A missing closing digit is invisible until a customer tries to call.
3. Read the opening paragraph aloud — if it sounds robotic or repetitive, it reads that way to Google too. Flag any pages where the opening is too similar to others in the batch.
4. Uniqueness spot check — take three pages targeting nearby cities (e.g., Tempe, Mesa, Chandler) and compare the opening paragraphs side by side. If they’re more than 30% similar, your prompt needs tighter local context instructions.
5. Schema validation — run 5 pages through Google’s Rich Results Test. Fix any schema errors before submitting the full sitemap. One broken schema pattern replicated across 500 pages is 500 indexing problems.
This QC process takes 60–90 minutes for a 500-page build. It’s not optional.
Scaling to 500 Pages with Batch Processing
Once your prompts are validated, the generation step is straightforward. Your input is a CSV with one row per location. Your output is a folder of completed page files, one per row.
import anthropic
import csv
import os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
PAGE_PROMPT = """You are writing the main content section for a local service
business landing page...
[full prompt template here]
"""
def generate_page(row: dict) -> str:
filled = PAGE_PROMPT.format(**row)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": filled}]
)
return response.content[0].text
with open("locations.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
slug = f"{row['city'].lower().replace(' ', '-')}-{row['state'].lower()}"
output_path = f"output/pages/{slug}.txt"
if os.path.exists(output_path):
continue # skip already-generated pages on reruns
content = generate_page(row)
with open(output_path, "w") as out:
out.write(content)
print(f"Generated: {slug}")
A few practical notes on running this at scale:
Add a rate limit delay. The Anthropic API has tier-based rate limits. Add time.sleep(0.5) between calls to stay well within limits on standard tier access. A 500-page run at 0.5 seconds per call takes under 10 minutes.
Use the skip pattern. The if os.path.exists check lets you re-run the script after errors without regenerating completed pages. On a 500-page run, you will hit an error somewhere — don’t regenerate everything from scratch.
Run all five prompts in a single pass. Generate the page body, FAQ, and meta tags in one loop iteration per row. Write each to a separate file or column. You’ll thank yourself when it’s time to assemble the final page templates.
Store raw outputs before templating. Keep the Claude output files separate from your final page HTML. If you need to regenerate a section or adjust a prompt, having the raw outputs means you only re-run what changed.
The Output Quality Bar to Aim For
Before deploying, ask yourself one question about a random page from your build: Would I be comfortable if a client or a prospect read this page?
Not “is it good enough to slip past Google” — that bar keeps moving and it’s not a strategy. The actual bar is whether the page is genuinely useful to someone in that city looking for that service. Does it answer their likely questions? Does it establish local credibility? Does it give them a clear path to contact?
If the answer is yes, you have a page worth publishing. If it reads like a template with a city name swapped in, go back to the prompt.
The businesses winning with programmatic SEO for local businesses aren’t getting away with thin content — they’re building pages that are legitimately useful at scale. That’s what this prompt stack is designed to produce.
The full pSEO Playbook includes all five prompts above with extended variants, the complete Python batch processing script, the Astro page template, the CSV data structure, and the step-by-step deployment guide for getting 500 pages indexed cleanly.
Ready to scale?
Get the SEOHQ Toolkit
Templates, prompts, and tools to build local SEO at scale.
Browse Tools on Gumroad