TL;DR: I run a cleaning company in the GTA. In 90 days I built 38 niche landing pages using Supabase + a Lovable-built admin form + a pSEO content generator. Here's what worked and what didn't.
The problem
Local service businesses compete on Google Maps (Google Business Profile) and on organic search. The GBP side is well-documented. The organic side is where most service businesses lose — they publish a Services page and a Locations page and expect to rank.
They don't. A single generic "cleaning services Toronto" page is trying to compete with franchise sites, aggregators (Thumbtack, Jiffy, TaskRabbit), and every other cleaning company in the city.
What works: a page per service × per location. Long-tail keywords with lower search volume but dramatically higher intent.
The system
Stack:
- Supabase (Postgres) for content storage
- Lovable (for the admin form that writes to Supabase)
- Next.js / React (generated by Lovable) for the front-end
- A content generator script that reads a table of niche + location combos and outputs seed content for each
Content generator in rough pseudocode:
for (const niche of niches) {
for (const location of locations) {
const page = {
slug: `${niche.slug}-${location.slug}`,
h1: `${niche.name} in ${location.name}`,
subheadline: buildSubheadline(niche, location),
benefits: niche.benefits,
painPoints: niche.painPoints,
faqs: generateFAQs(niche, location),
metaTitle: buildMetaTitle(niche, location),
metaDesc: buildMetaDesc(niche, location),
status: 'draft'
};
await supabase.from('niche_landing_pages').insert(page);
}
}
The gotchas
1. Sitemap discovery. The pages rendered fine and had internal links, but the sitemap.xml generator on Lovable didn't include the /landing/* route. Google had no way to discover the 38 pages. Added them to the sitemap, submitted via GSC.
2. Schema markup. Each page needs LocalBusiness + Service schema. Initial build only had the homepage schema. Rolling this out per-landing page.
3. Content generation is the bottleneck, not publishing. The system can publish 100 pages in a day. Writing 100 unique, useful pages takes 3 months. Budget accordingly.
What ranks
Too early to conclusively say (most pages are 2-4 weeks old). But:
- Airbnb cleaning Toronto is showing impressions within the first 10 days
- Post-construction cleaning Toronto pulling some traffic already
- Deep niche pages (dental, law firm) ranking fast because competition is thin
Next: link acceleration
On-page is necessary but not sufficient. New pages with zero external links take 8-16 weeks to rank page 1. Pages with 2-3 DR 80+ backlinks rank in 2-4 weeks. Running a 30-day link acceleration plan now (you're reading one of the pieces of it).
If you're building a local service business, full process documented at procleaningpros.ca. Happy to answer any questions in the comments.
Top comments (0)