πŸ“πŸ“žβ­

Local SEO

6 steps β†’ more map-pack calls

6steps
48hreview reply
750char GBP desc
1/wkGBP post
3competitors to beat
0phone # changes

The system

πŸ“

1GBP

Categories Β· services Β· hidden SAB pin Β· posts Β· photos Β· Q&A

NEVER change phone numbers
GBP checklist
[ ] Primary category = most specific true category; add relevant secondaries (compare top 3 map competitors)
[ ] Services: every real service, each with a description (up to 300 chars)
[ ] Description: truthful, services + area + what makes us different, under 750 chars
[ ] Business name = real/legal name only (no keyword stuffing)
[ ] Service-area business: address HIDDEN, service areas set (NH365 = hidden pin at Hutto home)
[ ] Website link -> matching service/location page with UTM tags
[ ] Posts: 1 per week (offer, update, or job photo)
[ ] Photos: real job/team/location photos, add a few every month
[ ] Q&A: seed and answer common questions
[ ] Hours accurate (incl. holidays)
[ ] Export Performance search terms monthly -> feed into services, posts, pages
[!] NEVER change phone numbers on any GBP
[!] Sensitive edits (name, address, URL, category): update site + citations FIRST, then GBP
β–Ό
🏠

2Site

[Service] in [City] Β· tap-to-call Β· FAQ Β· schema

Tap-to-call = #1 lesson
On-page / location pages
[ ] Title + H1 = "[Service] in [City]" (no brand in front)
[ ] Big sticky tracked tap-to-call button above the fold (never form-only)
[ ] NAP matches GBP exactly in footer/contact
[ ] Unique local content: areas served, landmarks, real job photos
[ ] FAQ block + testimonials/case studies
[ ] Embedded map + driving area
[ ] Every blog post links down to the matching money page
[ ] TL;DR + answer-first intro + 3-5 takeaway bullets on posts
[ ] LocalBusiness schema in <head>, visible in rendered HTML
[ ] After every deploy: money pages return 200, indexable, right canonical
Schema: LocalBusiness JSON-LD template
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://EXAMPLE.com/#business",
  "name": "BUSINESS NAME",
  "url": "https://EXAMPLE.com/",
  "telephone": "+1-512-000-0000",
  "image": "https://EXAMPLE.com/logo.png",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Hutto",
    "addressRegion": "TX",
    "postalCode": "78634",
    "addressCountry": "US"
  },
  "areaServed": ["Hutto", "Round Rock", "Pflugerville", "Austin"],
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "08:00", "closes": "18:00"
  }],
  "sameAs": ["GBP_MAPS_URL", "FACEBOOK_URL", "LINKEDIN_URL"]
}
</script>
Note: hidden service-area business -> leave out streetAddress. Use a more specific @type when one fits (e.g. Notary, GeneralContractor).
β–Ό
⭐

3Reviews

QR card Β· 1 opt-in text Β· reply in 48h

Never numbers from loan apps
Review system
1. QR card handed out at every job -> direct Google review link
2. One opt-in follow-up text 2-3 days later (only if they said OK; no second nag)
3. Ask them to mention the service and city; photos welcome
4. No incentives, no review gating
5. Reply to every review within 48 hours (template below)
6. Builders with no cell: email the link instead
[!] NEVER take numbers from loan applications
SEO review-reply template
Thank you, [First name]! It was a pleasure helping you with your [service] in [city]. We're glad [specific detail from their review]. If you ever need [service / related service] again, we're here. - Bernhard, [Business name]

Bad review:
Hi [Name], thank you for the feedback. I'm sorry [issue]. That's not the experience we want. Please call me at [main business number] so I can make it right. - Bernhard
β–Ό
πŸ”—

4Citations + links

Same NAP everywhere Β· local + partner links

Aggressive = sandbox only
Citations / backlinks
[ ] Core citations, same NAP everywhere: Apple Business Connect, Bing Places, Yelp, Facebook, BBB, Nextdoor
[ ] Industry directories (notary: NNA, 123notary, Notary Rotary; builders: HBA)
[ ] Local links: chamber of commerce, church/community, sponsorships, local news
[ ] Partner links: builders, title companies, realtors, lenders
[ ] Check backlinks monthly (Semrush / OpenSEO) and log new ones on the dashboard
[!] Bought links, PBNs, link loops = sandbox sites only
β–Ό
πŸ“ž

5Tracking

CallRail per source Β· GA4 Β· GSC Β· Clarity

Calls = rent proof
Call tracking (CallRail)
[ ] One tracking number per source (GBP, website, ads) - label each source
[ ] Website: dynamic number swap; tap-to-call is the main button
[ ] Forward to the right real phone; test each number after any change
[ ] Weekly: listen/score call quality, count leads per site (rank-and-rent proof)
[ ] Report calls on the brand dashboard
[!] Do not put tracking numbers on GBP or change GBP phone numbers
β–Ό
πŸ—ΊοΈ

6Rank grids

OpenSEO grid monthly Β· beat top 3

Fix gaps β†’ repeat
↻ repeat monthly

πŸ† My top 15 lessons

#1 L041Tracked tap-to-call
#2 L005Fix low-CTR titles
#3 L008Exact GBP category
#4 L009GBP β†’ matching page
#5 L012Post-deploy 200 check
#6 L042Title = service + city
#7 L017GBP search terms
#8 L018Fill all services
#9 L019750-char description
#10 L020Real name only
#11 L021Mistakes audit
#12 L022Head tags render
#13 L046Posts link to money page
#14 L047Top-3 competitor audit
#15 L048TL;DR posts
Top 15 - full text
1. L041 - Biggest above-the-fold button = tracked tap-to-call; never form-only.
2. L005 - High-impression, low-CTR pages in GSC: rewrite titles and meta.
3. L008 - Most specific true primary GBP category + a few relevant secondaries.
4. L009 - Link each GBP to the one matching site/location page (with UTM).
5. L012 - Check money pages load (200, indexable) before and after every deploy.
6. L042 - GBP landing page title/H1 = service + city; add FAQ, cases, testimonials.
7. L017 - Export GBP search terms monthly; use them in services, posts, pages.
8. L018 - Fill every real GBP service with a description.
9. L019 - Truthful, specific GBP description under 750 characters.
10. L020 - Real business name only; no keyword stuffing (suspension risk).
11. L021 - Run a local-SEO mistakes audit as intake for each brand.
12. L022 - Title/meta/canonical/schema must show in the rendered HTML head.
13. L046 - Every supporting post links down to a money page.
14. L047 - Monthly top-3 competitor GBP audit; beat them on each gap.
15. L048 - Posts: TL;DR, answer first, end with 3-5 bullets.

⚠️ SANDBOX ONLY

βœ… girlssize18swimwear.com Β· spare 4kcloser Β· spare agentlingo

β›” NEVER: NH365 Β· NLH Β· binder Β· client sites

L038 Parasite SEO Β· L039 Floate tactics Β· L040 high-DR link lists Β· L058 duplicate GBP products Β· L059 3-way link trades Β· PBNs / bought links

Copy sandbox list
Only on: girlssize18swimwear.com, spare 4kcloser domains, spare agentlingo domains.
NEVER on NH365, NLH, the binder, or client sites.

- L038 Parasite SEO
- L039 Charles Floate frameworks / 2020-era tactics
- L040 Free high-DR backlink lists
- L058 Keyword variants as duplicate GBP products
- L059 'Uno Reverse' three-way link trades
- Web2 link loops; third-party indexers; keywords in GBP name without DBA; bought links / PBNs

🧰 My tool stack

☁️CloudflareDomains, DNS, redirects, and Pages hosting for every site.
πŸ“Google Business ProfileMap listings: categories, services, posts, photos, reviews. API application pending.
πŸ”ŽGoogle Search ConsoleQueries, CTR, page-2 wins, indexing checks.
πŸ“ŠGA4Traffic and conversions (calls, forms) per site.
πŸ”₯Microsoft ClarityHeatmaps and session recordings to see where visitors stop.
πŸ“ˆSemrushKeyword research, competitors, backlinks, site audits.
πŸ—ΊοΈOpenSEOLocal rank grids, rank tracking, site audits, GBP data.
πŸ“žCallRailTracking numbers, call recordings, call quality, leads per source.
πŸ—“οΈBufferSchedule GBP-supporting social posts.
βœ‚οΈOpusClipCut and schedule short videos (YouTube, Reels).
πŸ§‘β€πŸ’»HeyGenAI avatar/explainer videos.
🎨CanvaGraphics, QR review cards, post images.
βœ’οΈNotaryGadgetNotary signing jobs
πŸ““NotionSEO Hub: lessons, tactics, playbooks.
πŸ’ŽObsidianCourse notes and lesson library (LIBRARIAN).
🧾Google SheetsSEO Lessons tracker (ranked lessons, status per brand).
βœ‰οΈButtondownEmail newsletter.
πŸŽ›οΈBrand dashboardMoney, status, domains, backlinks, phone numbers, calls
πŸ†SEO Lessons trackerRanked to-do list of lessons

Dashboard Β· Lessons tracker Β· LLM Kit

πŸ’¬ Prompts

✨ GBP description
Write a Google Business Profile description for [Business name], a [service] business serving [cities]. Under 750 characters. Truthful and specific: main services, service area, what makes us different, how to book. No keyword stuffing, no phone numbers or URLs, no ALL CAPS.
✨ Location page
Write a location page for "[Service] in [City], TX" for [Business name]. Title and H1: "[Service] in [City]". Answer-first intro (2 sentences), services list, local details (neighborhoods, landmarks, nearby cities), 5 FAQs a local customer asks, a testimonial placeholder, and a strong call-to-call line. Plain English, no fluff.
✨ Review reply
Write a reply to this Google review. Thank them by first name, mention the service and city naturally once, refer to one specific detail they wrote, keep it under 60 words, sign as Bernhard. If negative: calm, own it, ask them to call. Review: [PASTE]
✨ Competitor GBP gap
Compare my GBP with these top 3 map competitors on: primary/secondary categories, number and recency of reviews, photos, services, posts, Q&A. Give a table and the top 5 gaps to fix this month, easiest first. Mine: [PASTE] Competitors: [PASTE]
✨ GSC quick wins
Here is a GSC export. List queries at positions 5-20 and pages with high impressions but low CTR. For each, suggest a new title tag (under 60 chars) and meta description (under 155 chars). [PASTE]
✨ Karpathy it
Karpathy it: explain the answer above in ASD-STE100 Simplified Technical English (short sentences, one idea per sentence, active voice). Then give a simple diagram of the steps, and a 5-line action list.
Updated Oct 12, 2026