SKILL.md
SEO Local Business
Generate a complete SEO package for local business websites. Produces meta tags, structured data, robots.txt, and sitemap.xml.
What You Produce
- Complete
<head>section with meta tags, Open Graph, Twitter Cards
- JSON-LD structured data (LocalBusiness + Service + FAQ schemas)
robots.txt
sitemap.xml
Workflow
Step 1: Gather Business Info
Ask for (or extract from existing site):
Required
Optional
Business name
ABN
Primary service
Opening hours
Location (city/suburb)
Social media URLs
Phone number
Price range
Website URL
Service areas (suburbs)
Business description
GPS coordinates
Step 2: Generate Head Tags
Fill placeholders in this template:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Primary Meta Tags -->
<title>{{PAGE_TITLE}} | {{BUSINESS_NAME}}</title>
<meta name="title" content="{{PAGE_TITLE}} | {{BUSINESS_NAME}}">
<meta name="description" content="{{META_DESCRIPTION}}">
<!-- Canonical URL -->
<link rel="canonical" href="{{CANONICAL_URL}}">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="{{CANONICAL_URL}}">
<meta property="og:title" content="{{PAGE_TITLE}} | {{BUSINESS_NAME}}">
<meta property="og:description" content="{{META_DESCRIPTION}}">
<meta property="og:image" content="{{OG_IMAGE_URL}}">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="{{CANONICAL_URL}}">
<meta property="twitter:title" content="{{PAGE_TITLE}} | {{BUSINESS_NAME}}">
<meta property="twitter:description" content="{{META_DESCRIPTION}}">
<meta property="twitter:image" content="{{OG_IMAGE_URL}}">
<!-- Geo Tags (Local SEO) -->
<meta name="geo.region" content="{{GEO_REGION}}">
<meta name="geo.placename" content="{{CITY}}">
<meta name="geo.position" content="{{LATITUDE}};{{LONGITUDE}}">
<meta name="ICBM" content="{{LATITUDE}}, {{LONGITUDE}}">
<!-- Favicons -->
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32.png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<!-- Structured Data -->
<script type="application/ld+json">
{{JSON_LD_SCHEMA}}
</script>
</head>
Title tag patterns (50-60 chars max):
Page
Pattern
Example
Homepage
Brand - Tagline
Newcastle Plumbing - 24/7 Emergency Service
Service
Service in Location | Brand
Hot Water Repairs Newcastle | ABC Plumbing
About
About Us | Brand
About Us | ABC Plumbing Newcastle
Contact
Contact | Brand
Contact Us | ABC Plumbing Newcastle
Meta description patterns (150-160 chars):
Page
Pattern
Homepage
[USP]. [Service] in [Location]. [CTA]. Call [phone].
Service
Professional [service] in [location]. [Benefit]. [Trust signal]. Get a free quote today.
About
[X] years serving [location]. [Team info]. [Credentials]. Learn about [brand].
Contact
Contact [brand] for [service] in [location]. [Hours]. Call [phone] or request a quote online.
Step 3: Generate Structured Data
LocalBusiness (homepage — always include):
Use LocalBusiness or a more specific subtype:
Subtype
Use for
Plumber
Plumbing services
Electrician
Electrical services
RoofingContractor
Roofing
HVACBusiness
Air conditioning/heating
AutoRepair
Mechanics
BeautySalon
Hair/beauty
Dentist
Dental practices
LegalService
Law firms
AccountingService
Accountants
RealEstateAgent
Real estate
Restaurant
Restaurants/cafes
BarOrPub
Pubs/bars
Hotel
Accommodation
Store
Retail shops
ProfessionalService
Generic professional
LocalBusiness schema properties:
Property
Required
Notes
@type
Yes
LocalBusiness or subtype from above
name
Yes
Business name as shown to customers
image
Yes
Primary business image or logo
description
Yes
1-2 sentence business description
@id
Yes
Unique ID, use {url}/#organization
url
Yes
Website homepage URL
telephone
Yes
International format: +61-2-4900-1234
address
Yes
PostalAddress (see below)
email
Recommended
Primary contact email
priceRange
Recommended
$ to $$$$
geo
Recommended
GeoCoordinates: latitude/longitude
openingHoursSpecification
Recommended
See hours format below
areaServed
Recommended
Cities/suburbs served
sameAs
Recommended
Social media profile URLs
taxID
Optional
ABN for Australian businesses
logo
Optional
Business logo URL
foundingDate
Optional
ISO 8601 date
paymentAccepted
Optional
e.g. "Cash, Credit Card, EFTPOS"
currenciesAccepted
Optional
AUD
PostalAddress:
Property
Example
streetAddress
123 Hunter Street
addressLocality
Newcastle
addressRegion
NSW
postalCode
2300
addressCountry
AU
Example:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "ABC Plumbing Newcastle",
"image": "https://www.abcplumbing.com.au/og-image.jpg",
"description": "Professional plumbing services in Newcastle and Lake Macquarie.",
"@id": "https://www.abcplumbing.com.au/#organization",
"url": "https://www.abcplumbing.com.au",
"telephone": "+61-2-4900-1234",
"email": "info@abcplumbing.com.au",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Hunter Street",
"addressLocality": "Newcastle",
"addressRegion": "NSW",
"postalCode": "2300",
"addressCountry": "AU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": -32.9283,
"longitude": 151.7817
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday"],
"opens": "08:00",
"closes": "12:00"
}
],
"areaServed": [
{ "@type": "City", "name": "Newcastle" },
{ "@type": "City", "name": "Lake Macquarie" }
],
"sameAs": [
"https://www.facebook.com/abcplumbing",
"https://www.instagram.com/abcplumbing"
]
}
Service (service pages — add per service):
Property
Required
Notes
name
Yes
Service name
description
Yes
What the service provides
provider
Yes
{ "@id": "{url}/#organization" }
areaServed
Recommended
City or region
serviceType
Recommended
Category of service
offers
Optional
Pricing/availability
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Hot Water System Installation",
"description": "Professional hot water system installation and replacement in Newcastle.",
"provider": { "@id": "https://www.abcplumbing.com.au/#organization" },
"areaServed": { "@type": "City", "name": "Newcastle" },
"serviceType": "Plumbing",
"offers": {
"@type": "Offer",
"availability": "https://schema.org/InStock",
"priceRange": "$$"
}
}
FAQ (pages with FAQ sections):
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a plumber cost in Newcastle?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Plumber callout fees in Newcastle typically range from $80-150."
}
}
]
}
Step 4: Generate robots.txt and sitemap.xml
robots.txt:
User-agent: *
Allow: /
Sitemap: {{SITE_URL}}/sitemap.xml
sitemap.xml:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{{SITE_URL}}/</loc>
<lastmod>{{DATE}}</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<!-- Add one <url> per page. Priority: 1.0 homepage, 0.8 services, 0.6 others -->
</urlset>
Step 5: Validate
Test structured data at: https://validator.schema.org/
Common validation errors:
- Missing
@context— every JSON-LD block needs it
- Wrong phone format — must be international (
+61-...)
- Missing
@id— needed for cross-referencing between schemas
- Empty
areaServed— include at least one city
Australian-Specific Patterns
Phone Numbers
<!-- Link: international format. Display: local format. -->
<a href="tel:+61249001234">(02) 4900 1234</a>
Schema telephone: "+61-2-4900-1234"
Prefix
International
02
+612
04
+614
1300
Keep as-is
ABN
Add to LocalBusiness schema when available:
{ "taxID": "12 345 678 901" }
Australian State Codes
State
Code
Geo Region
New South Wales
NSW
AU-NSW
Victoria
VIC
AU-VIC
Queensland
QLD
AU-QLD
South Australia
SA
AU-SA
Western Australia
WA
AU-WA
Tasmania
TAS
AU-TAS
Northern Territory
NT
AU-NT
ACT
ACT
AU-ACT
Service Areas
Use areaServed with Australian city and suburb names (see LocalBusiness example above).