Loading...
Loading...
Service businesses live or die by local SEO, and right now you either hand-write a page per location or skip this powerful SEO hack entirely. Programmatic Local SEO ends both. Declare a URL pattern once. Every entry in your service-areas list (or services list, or both) materialises into its own page with its own meta tags, its own canonical URL, and a spot in the sitemap. Search engines see the same depth of content a hand-built campaign would produce. Your team writes one template.
One service in one area is one page. Five services in thirty areas is 150 pages. Every page has its own URL, its own meta tags, its own canonical, and its own row in your sitemap. The math runs in the platform; your team manages two lists.
That's the whole feature: declare a URL pattern with bracketed variables (/repair/[service]/[area]), bind each variable to a source list in your Business Dash sections, and Business Dash materialises the cross-product. Add a service, all areas get a new page for it. Add an area, all services get a new page in it. Remove either, the affected pages stop materialising and the sitemap drops them on the next refresh.
The SEO infrastructure ships with it: per-page canonical URLs, deduplicated meta tags, paginated sitemap above 50K entries, robots.txt with the right Sitemap line, and per-page noindex overrides if you want to exclude a specific combination.
Service-business orgs win local search the same way they always have: by having a page per place they serve, with copy that mentions the place by name, with structured data that says "this business serves X."
The companies that do this well have 30, 50, 100 landing pages — one for each city, neighborhood, or service area. Each page has a unique title, a unique meta description, a sentence in the hero that names the city, a paragraph that mentions the state, a CTA band that says "Call us in {city}."
The companies that don't do this well have one /services page and a list of cities in the footer. Google indexes the one page. The cities in the footer don't get their own URLs, so they don't show up in search.
You can do the math: same business, same trades, same crews — one of them shows up when somebody Googles "garage door repair Saint Paul" and the other doesn't.
In your bd.config.ts (or the site-builder UI if you don't code), you declare one template:
``ts
defineParallelPage({
routePattern: "/repair/[service]/[area]",
variables: {
service: { source: { section: "services" }, slugField: "type", tokenFields: ["type", "description"] },
area: { source: { section: "serviceAreas", path: "areas" }, slugField: "slug", tokenFields: ["name", "state"] },
},
meta: {
title: "{service.type} in {area.name}, {area.state} | {company.shortName}",
description: "Professional {service.type} in {area.name}. Call {company.phone}.",
},
templateRef: "repairPage",
})
``
That declaration generates one page per (service × area) combination. Five services × thirty areas = 150 pages, each with substituted meta tags, substituted body copy, its own URL, and an entry in your sitemap.
Add a new service area in the Business Dash dashboard. Five new pages exist immediately — one per service. The sitemap reflects them on the next request. The webhook fires bd:section:serviceAreas and your consumer-side cache invalidates every variant in one shot. Search engines discover the new URLs the next time they fetch your sitemap.
Remove an area. The five pages stop materialising. The sitemap drops them. Your robots.txt continues serving Google a clean signal.
You manage one list. The fan-out is automatic. Your team never edits 150 pages.
Business Dash auto-generates /sitemap.xml covering every materialised URL with a correct <lastmod> and pagination above 50K entries. And /robots.txt with the right Sitemap: line, per-page noindex overrides where you set them, and — critically — an automatic Disallow: / body during platform-level outages so search engines treat downtime as temporary, not permanent removal.
Plug in two two-line route handlers on your Next.js / Astro / etc. consumer that proxy these endpoints. Done.
One variable in the URL gives you one landing page per entry. Two variables give you the cross-product. Add a third (services × areas × types of customers) and the fan-out grows multiplicatively.
Most service businesses live in the 30-150 page range. Operations with a real matrix — locksmiths with 4 services × 30 cities × 2 dispatch windows — land in the 240 range. Sitemap pagination handles the math; you keep editing your one template.
Sign up and you'll land on the dashboard with every Business Dash feature wired and ready. Trial accounts are free.