When a marble and granite company in Elazığ, Turkey asked me to rebuild their website from scratch, I thought it would be a simple two-week project. Three months later I had learned more about local SEO, structured data, and regional content strategy than I expected.
This is the story of building vefamermer.com — a gravestone and natural stone platform serving Eastern Anatolia (Elazığ, Bingöl, Tunceli, Muş).
The Problem
The previous site was built on a no-code platform that had completely broken down. No admin panel, no product catalog, no SEO. The company — Vefa Mermer, a marble and granite firm with decades of experience in gravestone production — was invisible online despite being one of the region's most established players.
The brief:
- Rebuild from scratch, fast
- Add a product catalog for 25+ gravestone models
- Cover every district in the service region with dedicated SEO pages
- Make it work on mobile (most customers are on phones)
Tech Stack
Framework → Next.js 14 (App Router)
Database → PostgreSQL (Vercel Postgres)
Hosting → Vercel
Schema → Schema.org (LocalBusiness + Product)
Analytics → Google Analytics 4
The Local SEO Architecture Problem
The biggest challenge was local SEO at scale. Vefa Mermer serves:
- Elazığ — city center + 11 districts
- Bingöl — city center + 8 districts
- Tunceli — city center + 8 districts
- Muş — city center + 6 districts
That's 40+ distinct locations people search for individually. Someone in Bingöl searches "Bingöl mezar taşı fiyatları" — not "Elazığ mezar taşı". These are completely separate search intents.
The solution was a programmatic page system:
// app/mezar-tasi/[sehir]/[ilce]/page.js
export async function generateStaticParams() {
return locations.flatMap(({ sehir, ilceler }) =>
ilceler.map((ilce) => ({ sehir, ilce }))
)
}
export async function generateMetadata({ params }) {
const { sehir, ilce } = params
return {
title: `${ilce} Mezar Taşı Fiyatları | Vefa Mermer`,
description: `${ilce} mezar taşı modelleri, granit ve mermer seçenekleri.
Ücretsiz keşif ve montaj. Vefa Mermer — ${sehir} bölgesi.`,
}
}
Each page is unique in content but generated from a shared template. Google indexes them as separate pages, each targeting a distinct long-tail keyword. Long-tail local SEO is massively underrated — "Bingöl merkez mezar taşı" has almost zero competition.
Schema.org for a Local Stone Business
For a local service business, structured data makes a real difference — especially for Google Business Profile consistency.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Vefa Mermer",
"description": "Elazığ mermer ve granit mezar taşı üretimi",
"url": "https://vefamermer.com",
"areaServed": ["Elazığ", "Bingöl", "Tunceli", "Muş"],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Mezar Taşı Modelleri"
}
}
Consistency between on-site schema and Google Business Profile signals trust to Google. The domain was verified via DNS TXT record in Search Console.
Product Catalog: SVG Instead of Photos
Gravestone models are hard to photograph consistently — different lighting, angles, sizes. We solved this by building SVG-based product illustrations for each of the 25 priority models.
Each SVG is:
- Generated from dimension inputs
- Resolution-independent and responsive
- Embeddable in product schema as an image
Clean, consistent product visuals without a photography budget.
WhatsApp as the Primary CTA
In Eastern Turkey, customers don't fill out web forms. They use WhatsApp. We built a quote button that pre-fills a message with the selected model and dimensions:
const whatsappQuote = (model, dimensions) => {
const msg = encodeURIComponent(
`Merhaba, ${model} modeli için fiyat öğrenmek istiyorum.\n` +
`Ölçüler: ${dimensions.en}x${dimensions.boy} cm`
)
return `https://wa.me/90XXXXXXXXXX?text=${msg}`
}
Conversion from this button was immediately the highest of any contact method on the site.
What I Learned
Local long-tail keywords are almost uncontested.
"Tunceli mezar taşı fiyatları" has near-zero competition. Ranking for 40 such terms is far easier than competing for one broad keyword.
WhatsApp beats forms in regional markets.
No form anxiety, no email delay — just a pre-filled message the customer can send in one tap.
SVG illustrations beat stock photos for niche products.
Consistent, scalable, unique — and you can generate them programmatically.
Schema.org LocalBusiness + GBP consistency matters.
Google cross-references your on-site data with your Business Profile. Keeping them in sync speeds up trust signals.
The site is live at vefamermer.com. Next step is adding 3D model previews for the top gravestone categories.
If you've built anything for local businesses in non-English markets — especially with programmatic SEO at the district level — I'd love to hear how you handled it.
Top comments (0)