Everyone invests in PPC for emergency keywords. I did the opposite.
When you launch an emergency services directory, the obvious play is to buy traffic.
Think about it: someone has a burst pipe at 3AM. They search "emergency plumber Madrid." It's the definition of high-intent traffic.
But I built [Find Emergency Plumber](https://find-emergency-plumber.com) without spending anything on PPC.
Instead, I generated 1,104 static pages with Next.js and optimized them for SEO.
Here's why I made that decision (and the real numbers behind it).
The PPC trap in emergency services
Conventional logic says: "Emergency plumbers have high margins → they can afford expensive leads → you can bid high on Google Ads and still be profitable."
The problem with that logic:
1. You're competing with well-funded aggregators
HomeAdvisor, Angi, Thumbtack. They have deep pockets and business models that can absorb higher acquisition costs than you.
2. Prices rise faster than your ability to optimize
When you build a directory, you don't control the final conversion. The plumber closes the sale, not you. That means your margin to optimize CPCs is limited.
3. Every lead costs money, even the bad ones
With PPC you pay per click, not per conversion. In emergencies, many people are in panic mode and click without real intent to hire.
The alternative: Programmatic SEO as competitive advantage
Instead of buying traffic, I decided to build an asset that generates organic traffic indefinitely.
Here's how I structured it:
Technical architecture that scales
```typescript // Dynamic route generation for 90 cities × multiple plumbers export async function generateStaticParams() { const cities = await supabase .from('cities') .select('slug');
const plumbers = await supabase .from('plumbers') .select('slug, city_id');
// Generate routes [city]/[plumber] return plumbers.map(plumber => ({ city: cities.find(c => c.id === plumber.city_id).slug, plumber: plumber.slug })); } ```
This generates 1,104 pre-rendered static pages. Each optimized for:
- Specific local searches
- Emergency terms with commercial intent
- Long-tail keywords that would be prohibitively expensive in PPC
The real cost of SEO vs PPC
Here's the no-BS comparison:
PPC Model (hypothetical):
- Cost per every visitor
- Stops when you stop paying
- Requires constant optimization
- Vulnerable to competitor price changes
SEO Model (what I built):
- One-time development investment (time + hosting)
- Compound traffic that grows over time
- Asset that improves with each update
- Protection against price wars
The key difference: SEO is an asset, PPC is an expense.
The 3 technical decisions that made this possible
1. Static Site Generation with ISR fallback
```typescript export const revalidate = 86400; // 24 hours
export default async function PlumberPage({ params }) { const plumber = await getPlumberData(params.city, params.plumber);
if (!plumber) { notFound(); }
return <PlumberProfile data={plumber} />; } ```
This gives me:
- Pre-rendered pages for maximum speed (Core Web Vitals)
- Ability to add new cities without full rebuild
- Always fresh content with automatic revalidation
2. IndexNow webhooks for real-time indexing
When I publish new content (emergency pages, blog posts), a webhook automatically notifies Google and Bing:
```typescript // API route that receives webhooks from Sanity CMS export async function POST(request: Request) { const { _type, slug } = await request.json();
if (_type === 'post') { await submitToIndexNow([ `https://find-emergency-plumber.com/blog/${slug.current}` ]); }
return new Response('OK', { status: 200 }); } ```
Result: content indexed in hours, not weeks. This is critical for capturing trends and emerging keywords.
3. Emergency landing pages with FAQ schema
I built specific pages for each emergency type:
- Frozen pipes
- Sewer backups
- Gas leaks
- Water heater failures
Each with schema markup that Google can use for rich snippets:
```json { "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "How long does an emergency plumber take to arrive?", "acceptedAnswer": { "@type": "Answer", "text": "Verified emergency plumbers in our network typically arrive within 60-90 minutes..." } } ] } ```
This positions me for featured snippets without paying for premium placement.
When PPC DOES make sense
I'm not saying PPC is bad. There are cases where it makes a lot of sense:
1. When you're testing demand
If you don't know if "emergency plumber [city]" has enough volume, a test PPC campaign gives you data in days, not months.
2. When you already dominate SEO for a vertical
If you're already #1 organic for your main keywords, PPC lets you capture more of that same high-intent traffic.
3. When you have margins to absorb high CAC
If your model allows high acquisition costs (e.g., you sell annual contracts, not one-time leads), PPC can scale quickly.
4. For temporary or seasonal promotions
A plumbing service in areas with frozen pipes in winter might benefit from seasonal PPC campaigns.
But for a bootstrapped directory without external investment, programmatic SEO was the only viable long-term play.
Real numbers after 3 months
Without getting into sensitive details, here's what I can share:
- **1,104 pages indexed** in Google Search Console
- **90 cities** covered with specific local content
- **1,251 verified plumbers** with quality scores
- **Consistent organic growth** without advertising spend
- **Recent commits** focused on solving indexation issues (canonical tags, redirects, structured data)
The last significant commit (December 27) added specific emergency landing pages with improved SEO. That's content that will work for me for years, not just while I'm paying for ads.
The lesson for your next project
Here's the question you need to ask yourself before deciding between SEO and PPC:
Are you building a business or renting one?
With PPC, you're essentially renting traffic from Google. The day you stop paying, the traffic disappears.
With well-executed SEO, you build an asset. Every page, every article, every technical optimization compounds.
For a solopreneur or small team, that difference is crucial.
The complete technical setup
If you want to replicate this approach:
Stack:
- Next.js 15 with App Router (for efficient SSG)
- Supabase PostgreSQL (plumber and city data)
- Sanity CMS (blog content management)
- Vercel (deployment with edge functions)
- IndexNow (search engine notifications)
Architecture:
- Dynamic routes with `generateStaticParams()`
- ISR with revalidate for fresh content
- Sanity webhooks → API routes → IndexNow submission
- Schema markup on all critical pages
- Image optimization bypass for external CDNs
All code is in the public repo if you want to see the actual implementation.
The takeaway
Don't follow obvious advice just because it sounds logical.
"Emergency keywords = PPC" is the kind of conventional wisdom that works... if you have capital to burn.
But if you're building without external investment, you need to think about cumulative ROI, not just immediate ROI.
Every euro I didn't spend on PPC was another hour I could dedicate to building a better product, better landing pages, better technical SEO.
And that compound investment now generates organic traffic that will continue growing in 2026.
That's the difference between buying traffic and building a business.
---
*Building something similar? Code is on GitHub and I share updates on LinkedIn. Keep building.*
