Next.js’e geçmenin hız, güvenlik ve geliştirme esnekliği gibi iyi nedenleri vardır. Ama site taşıma, SEO açısından bir sitenin yaşayabileceği en riskli değişikliklerden biridir: URL’ler, şablonlar, iç bağlantılar ve render yöntemi aynı anda değişir. Google da site taşımalarından sonra sıralamalarda geçici dalgalanma olabileceğini açıkça belirtir.
İyi haber şu: Kayıpların büyük kısmı önlenebilir hatalardan kaynaklanır. Bu yazıda bir WordPress sitesini Next.js’e taşırken izlediğimiz kontrol listesini paylaşıyoruz.
Hiçbir taşıma sürecinde “sıfır trafik kaybı” garanti edilemez. Amaç, riski en aza indirmek ve sorunları hızla fark etmektir.
Aşama 1: Taşımadan önce, envanter çıkarın
1.1 Tüm URL’lerin listesi
Eski sitedeki her URL’yi kaydedin. Tek kaynak yetmez; birkaçını birleştirin:
- WordPress XML sitemap’leri (Yoast/Rank Math:
/sitemap_index.xml) - Bir tarayıcı aracıyla (ör. Screaming Frog) tam tarama
- Google Search Console → Sayfalar raporu ve Performans raporundaki sayfalar
- GA4’te açılış sayfaları raporu
- Dış bağlantı alan sayfalar (backlink aracınızdan)
Unutulan klasik WordPress URL’leri: kategori ve etiket arşivleri, yazar sayfaları, /page/2/ sayfalandırmaları, ek (attachment) sayfaları, ?p=123 kısa bağlantıları, /feed/ adresleri, /wp-content/uploads/ altındaki görseller ve PDF’ler.
1.2 Hangi sayfalar değerli?
Her URL için tıklama, gösterim, dönüşüm ve dış bağlantı verisini yan yana koyun. Bu tablo, hangi sayfanın birebir korunacağına, hangisinin birleştirileceğine ve hangisinin kaldırılacağına karar vermenizi sağlar.
1.3 Mevcut SEO verisini dışa aktarın
- Her sayfanın title, meta description, H1, canonical ve robots değerleri
- Yoast/Rank Math’teki yönlendirmeler (varsa)
- Yapısal veri (schema) türleri
- Görsel alt metinleri
robots.txtiçeriği
1.4 Karşılaştırma için kayıt alın
Taşıma öncesi son 3–6 ayın Search Console ve GA4 verilerini dışa aktarın. Önemli sorgular için mevcut konumları not edin. Yayın sonrası “düştü mü?” sorusunu ancak bir karşılaştırma noktanız varsa yanıtlayabilirsiniz.
Aşama 2: Yeni siteyi planlarken
2.1 Mümkünse URL’leri koruyun
En güvenli taşıma, URL’lerin değişmediği taşımadır. URL yapısını iyileştirmek istiyorsanız (ör. /hizmetler/ altında toplamak), bunu bilinçli yapın ve her değişikliği yönlendirme haritasına yazın.
Sondaki eğik çizgi (trailing slash): WordPress genellikle /sayfa/ biçimini kullanır. Next.js’te trailingSlash: true ayarıyla aynı biçimi koruyabilirsiniz. Bu küçük ayar, yüzlerce gereksiz yönlendirmeyi önler.
2.2 301 yönlendirme haritası
Her eski URL için tek bir hedef belirleyin:
| Eski URL | Yeni URL | Not |
|---|---|---|
| /eski-hizmet/ | /hizmetler/yeni-hizmet/ | Birebir karşılık |
| /category/haberler/ | /blog/ | Arşiv → hub |
| /?p=123 | İlgili yazı | Kısa bağlantı |
Kurallar:
- Kalıcı yönlendirme (301 veya 308) kullanın. Next.js
next.configiçindekiredirects()fonksiyonundapermanent: true308 döner; Google 308’i de kalıcı yönlendirme olarak değerlendirir. - Zincir yapmayın: A → B → C yerine A → C.
- Her şeyi ana sayfaya yönlendirmeyin. Karşılığı olmayan sayfaları en yakın ilgili sayfaya yönlendirin; gerçekten karşılığı yoksa 404 veya 410 döndürmek, alakasız bir sayfaya yönlendirmekten daha doğrudur. Google, alakasız yönlendirmeleri “soft 404” olarak değerlendirebilir.
- Görseller ve PDF’ler başka sitelerden bağlantı alıyorsa onları da yönlendirin.
2.3 Render yöntemi: İçerik HTML’de mi?
Next.js’in en büyük SEO avantajı, sayfaları sunucuda veya derleme sırasında HTML olarak üretebilmesidir. Bunu kaybetmeyin:
- İçerik sayfaları için statik üretim (SSG/ISR) veya sunucu tarafı render kullanın.
- Ana içeriği yalnızca istemci tarafında (
useEffectile veri çekip) göstermeyin. Google JavaScript’i işleyebilir, ancak bu ek bir adım ve gecikmedir; diğer arama motorları ve sosyal medya önizlemeleri için de HTML’de olan içerik daha güvenlidir. - Kontrol: Sayfanın kaynak kodunu (
view-source:) açtığınızda başlık ve metinler görünüyor mu?
2.4 Meta veriler ve canonical
- App Router’da
generateMetadataile her sayfanın title, description, canonical ve Open Graph değerlerini tanımlayın. - Eski sitedeki başarılı title’ları gerekçesiz değiştirmeyin; taşıma ile içerik değişikliğini aynı anda yapmak, sorun çıktığında nedenini bulmayı zorlaştırır.
- Canonical’lar mutlak URL ve son halindeki (yönlendirmesiz, sonu eğik çizgili) adres olmalı.
2.5 Yapısal veri
Yoast’ın otomatik ürettiği Organization, WebSite, BreadcrumbList ve Article şemalarını yeni sitede JSON-LD olarak yeniden üretin. Taşımadan sonra Zengin Sonuç Testi ile kontrol edin.
2.6 Sitemap ve robots.txt
- Next.js’te
app/sitemap.tsveapp/robots.tsile dinamik sitemap ve robots üretin. - Sitemap’te yalnızca 200 dönen, canonical, indekslenebilir URL’ler olsun.
- Staging ortamını mutlaka engelleyin (şifre veya
noindex) ve yayın günü bu engelin canlıya taşınmadığından emin olun. Bu, taşıma sonrası en sık yaşanan ve en pahalı hatalardan biridir.
2.7 Çok dilli siteler
Dil sürümleriniz varsa hreflang etiketlerini (karşılıklı ve x-default ile) yeni yapıda yeniden kurun. WordPress’te bu işi WPML/Polylang yapıyorsa, Next.js’te sizin kurmanız gerekir.
2.8 Performans ve görseller
next/imageile görselleri boyutlandırın; ancak görsel URL’leri değişiyorsa Google Görseller trafiğiniz için yönlendirme planlayın.next/fontile yazı tiplerini yükleyerek düzen kaymasını (CLS) azaltın.- Üçüncü taraf script’leri (analitik, chat)
next/scriptile ve gerekiyorsa onay sonrası yükleyin.
2.9 Analitik ve dönüşümler
Tek sayfa uygulaması (SPA) gezinmesinde sayfa görüntülemelerinin doğru ölçüldüğünü kontrol edin. Form, telefon ve WhatsApp dönüşüm olaylarını yeniden kurun ve test edin. Çerez onay panelini yeni sitede de çalışır halde bırakın.
Aşama 3: Yayın günü
- Yönlendirme haritasındaki tüm eski URL’leri bir betikle test edin: her biri tek adımda 301/308 ile doğru hedefe gitmeli, hedef 200 dönmeli.
robots.txtve sayfalarda istenmeyennoindexolmadığını kontrol edin.- Canonical, hreflang ve sitemap’i örnek sayfalarda kontrol edin.
- Search Console’da yeni sitemap’i gönderin. (Alan adı değişiyorsa “Adres değişikliği” aracını kullanın; yalnızca altyapı değişiyorsa gerekmez.)
- Formları gerçek gönderimle test edin.
- Eski sunucuyu hemen kapatmayın; sorun çıkarsa geri dönüş planınız olsun.
Aşama 4: Yayından sonra, izleme
- İlk hafta her gün: Search Console’da Sayfalar raporu (404, yönlendirme hataları, “taranmış ama dizine eklenmemiş”), sunucu hata kayıtları.
- İlk ay her hafta: Taşıma öncesi kaydettiğiniz verilerle tıklama ve gösterim karşılaştırması (sayfa bazında). Düşüş varsa sayfa bazında nedenini arayın: yönlendirme mi, içerik mi, render mı?
- Dış bağlantıların en çok gittiği eski URL’leri tekrar test edin.
- Yönlendirmeleri en az bir yıl kaldırmayın. Google, yönlendirmelerin uzun süre (en az bir yıl) tutulmasını önerir.
Özet kontrol listesi
| # | Kontrol | ✅ |
|---|---|---|
| 1 | Tüm eski URL’ler (sitemap + tarama + GSC + GA4 + backlink) listelendi | |
| 2 | Her URL için karar: koru / birleştir / kaldır | |
| 3 | Taşıma öncesi GSC ve GA4 verisi dışa aktarıldı | |
| 4 | Trailing slash biçimi eskiyle aynı | |
| 5 | 301 haritası zincirsiz, ana sayfaya toplu yönlendirme yok | |
| 6 | İçerik sayfaları SSG/SSR ile HTML olarak geliyor | |
| 7 | Title, description, canonical, OG her sayfada | |
| 8 | Schema yeniden üretildi ve test edildi | |
| 9 | Sitemap ve robots.txt doğru; staging engeli canlıda yok | |
| 10 | Hreflang (varsa) kuruldu | |
| 11 | Analitik, dönüşümler ve çerez onayı test edildi | |
| 12 | Yayın günü tüm yönlendirmeler test edildi | |
| 13 | Search Console’a sitemap gönderildi | |
| 14 | İlk ay haftalık karşılaştırma yapılıyor | |
| 15 | Yönlendirmeler en az bir yıl korunacak |
Sitenizi taşımayı planlıyor musunuz? Taşıma öncesi URL envanteri, yönlendirme haritası ve yayın sonrası takip için Teknik SEO hizmetimizi inceleyin veya bizimle iletişime geçin. WordPress tarafında kalmak istiyorsanız WordPress hizmetimize, özel geliştirme için Özel Yazılım & Next.js sayfasına bakabilirsiniz.