cloudflare-api
Hit the Cloudflare REST API directly for operations that wrangler and MCP can't handle well. Bulk DNS, custom hostnames, email routing, cache purge, WAF rules,…
Generate complete SEO setup for local business websites — HTML head tags, JSON-LD LocalBusiness schema, robots.txt, sitemap.xml. Australian-optimised with +61 phone, ABN, suburb patterns. Use whenever the user wants SEO for a local business (tradesman, café, clinic, agency,
$ npx -y skills add jezweb/claude-skills --skill seo-local-business --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/seo-local-businessContext preview
The summary Claude sees to decide when to auto-load this skill.
Generate complete SEO setup for local business websites — HTML head tags, JSON-LD LocalBusiness schema, robots.txt, sitemap.xml. Australian-optimised with +61 phone, ABN, suburb patterns. Use whenever the user wants SEO for a local business (tradesman, café, clinic, agency,
name: seo-local-business description: "Generate complete SEO setup for local business websites — HTML head tags, JSON-LD LocalBusiness schema, robots.txt, sitemap.xml. Australian-optimised with +61 phone, ABN, suburb patterns. Use whenever the user wants SEO for a local business (tradesman, café, clinic, agency, retailer), needs JSON-LD structured data, asks for LocalBusiness schema, or wants meta tags / robots.txt / sitemap for a suburb-serving business."
Generate a complete SEO package for local business websites. Produces meta tags, structured data, robots.txt, and sitemap.xml.
1. Complete `<head>` section with meta tags, Open Graph, Twitter Cards 2. JSON-LD structured data (LocalBusiness + Service + FAQ schemas) 3. `robots.txt` 4. `sitemap.xml`
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 |
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.` |
**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.abcplumbingProduction workflow skills for Claude Code. Each skill guides Claude through a recipe to produce tangible output — scaffolded projects, generated assets, professional documents, deployed services. Ten plugins of practical, production-oriented skills.
Repo: jezweb/claude-skills
Hit the Cloudflare REST API directly for operations that wrangler and MCP can't handle well. Bulk DNS, custom hostnames, email routing, cache purge, WAF rules,…
Scaffold and deploy Cloudflare Workers with Hono routing, Vite plugin, and Static Assets. Describe project, scaffold structure, configure bindings, deploy. Use…
Generate Drizzle ORM schemas for Cloudflare D1 databases with correct D1-specific patterns. Produces schema files, migration commands, type exports, and…
Cloudflare D1 migration workflow: generate with Drizzle, inspect SQL for gotchas, apply to local and remote, fix stuck migrations, handle partial failures. Use…
Generate database seed scripts with realistic sample data. Reads Drizzle schemas or SQL migrations, respects foreign key ordering, produces idempotent…
Scaffold Hono API routes for Cloudflare Workers. Produces route files, middleware, typed bindings, Zod validation, error handling, and API_ENDPOINTS.md…