Seo Geo

Automate and integrate geo-targeted SEO strategies for local search optimization

SEO Geo is a community skill for geographically targeted search engine optimization, covering local keyword research, Google Business Profile optimization, local citation building, geo-targeted content strategy, and location-based ranking analysis.

What Is This?

Overview

SEO Geo provides tools for optimizing web presence for location-based search queries. It covers local keyword research that identifies geographic search terms with traffic potential in specific markets, Google Business Profile optimization that maximizes visibility in local map results, local citation building that ensures consistent business information across directories, geo-targeted content strategy that creates location-specific pages and blog content, and location-based ranking analysis that tracks search positions across different geographic areas. The skill helps businesses attract local customers.

Who Should Use This

This skill serves local business owners seeking nearby customers through search, marketing agencies managing multi-location SEO campaigns, and content teams creating geo-targeted landing pages.

Why Use It?

Problems It Solves

Businesses without local SEO optimization miss customers searching for nearby services and products. Inconsistent business name, address, and phone information across directories hurts local search rankings. Generic content without geographic targeting fails to rank for location-specific queries. Multi-location businesses struggle to track rankings across different markets.

Core Highlights

Local keyword researcher identifies geo-modified search terms. Profile optimizer maximizes Google Business visibility. Citation builder ensures consistent directory listings. Rank tracker monitors positions across geographic areas.

How to Use It?

Basic Usage

from dataclasses import (
  dataclass, field)

@dataclass
class LocalListing:
  name: str
  address: str
  phone: str
  source: str

class CitationAuditor:
  def __init__(
    self,
    canonical: LocalListing
  ):
    self.canonical = (
      canonical)
    self.listings = []

  def add_listing(
    self,
    listing: LocalListing
  ):
    self.listings.append(
      listing)

  def check_consistency(
    self
  ) -> list:
    issues = []
    c = self.canonical
    for lst in (
      self.listings
    ):
      diffs = []
      if lst.name != c.name:
        diffs.append(
          'name')
      if (lst.address !=
        c.address):
        diffs.append(
          'address')
      if lst.phone != (
        c.phone
      ):
        diffs.append(
          'phone')
      if diffs:
        issues.append({
          'source':
            lst.source,
          'fields': diffs})
    return issues

canonical = LocalListing(
  'Acme Corp',
  '123 Main St',
  '555-0100',
  'website')
auditor = CitationAuditor(
  canonical)
auditor.add_listing(
  LocalListing(
    'Acme Corp',
    '123 Main Street',
    '555-0100',
    'yelp'))
for issue in (
  auditor
  .check_consistency()
):
  print(
    f'{issue["source"]}: '
    f'{issue["fields"]}')

Real-World Examples

from dataclasses import (
  dataclass)

@dataclass
class GeoKeyword:
  term: str
  location: str
  volume: int
  difficulty: int

class GeoKeywordPlanner:
  def __init__(self):
    self.keywords: list[
      GeoKeyword] = []

  def add_keyword(
    self,
    base_term: str,
    locations: list,
    volumes: list,
    diffs: list
  ):
    for loc, vol, d in zip(
      locations,
      volumes, diffs
    ):
      self.keywords.append(
        GeoKeyword(
          f'{base_term} '
          f'{loc}',
          loc, vol, d))

  def top_opportunities(
    self, n: int = 10
  ) -> list:
    scored = [
      (kw, kw.volume /
       max(kw.difficulty,
         1))
      for kw in
      self.keywords]
    scored.sort(
      key=lambda x:
        x[1],
      reverse=True)
    return [
      {'term': kw.term,
       'volume': kw.volume,
       'score': round(
         score, 1)}
      for kw, score
      in scored[:n]]

planner = GeoKeywordPlanner()
planner.add_keyword(
  'plumber',
  ['NYC', 'LA', 'Chicago'],
  [3200, 2800, 1500],
  [45, 50, 30])
for opp in (
  planner
  .top_opportunities(5)
):
  print(
    f'{opp["term"]}: '
    f'{opp["volume"]} vol, '
    f'score {opp["score"]}')

Advanced Tips

Create unique content for each location page rather than swapping city names in template content. Build local backlinks from community organizations and local news sites for geographic authority. Use schema markup for local business structured data to enhance map result appearances.

When to Use It?

Use Cases

Audit citation consistency across directories for a multi-location business chain. Research geo-modified keywords to identify the highest opportunity local markets. Create location-specific landing pages with unique content for each service area.

Related Topics

Local SEO, Google Business Profile, citation management, geo-targeting, local search, keyword research, and map optimization.

Important Notes

Requirements

Google Business Profile account for managing local listings. Access to local keyword research tools for geographic search data. Business information including name, address, and phone for citation auditing.

Usage Recommendations

Do: maintain consistent business information across all directory listings. Create unique, valuable content for each location page rather than thin templated pages. Encourage customer reviews on Google Business Profile for local ranking signals.

Don't: create hundreds of location pages with only city names changed since search engines penalize thin duplicate content. Ignore negative reviews as response quality affects local reputation. Use fake business addresses to target locations where you have no physical presence.

Limitations

Local rankings vary significantly between searcher locations making tracking complex. Google Business Profile features and ranking factors change without advance notice. Multi-location businesses face scaling challenges maintaining unique content for each area.