Canonical URL ve Duplicate Content Çözümleri

Canonical URL ve Duplicate Content Çözümleri
Duplicate content (yinelenen içerik), aynı veya çok benzer içeriğin birden fazla URL'de erişilebilir olması durumudur. Bu durum arama motorlarının hangi versiyonu indeksleyeceğini ve sıralayacağını karıştırır, link equity'nin bölünmesine ve organik trafiğin düşmesine yol açar. Canonical URL, bu sorunu çözmenin en etkili yöntemidir. Bu rehberde duplicate content'in nedenlerini, canonical tag kullanımını ve ileri düzey çözümleri ele alacağız.
Duplicate Content Nasıl Oluşur?
Birçok geliştirici farkında olmadan duplicate content sorunları yaratır. Yaygın nedenler şunlardır:
- www vs non-www:
www.site.comvesite.comaynı içeriğe hizmet eder. - HTTP vs HTTPS: Her iki protokolden de erişilebilir sayfalar.
- Trailing slash:
/blogve/blog/farklı URL'ler olarak algılanır. - Query parametreleri:
/products?sort=price,/products?sort=nameaynı ürün listesi. - Pagination: Sayfalanmış listelerin benzer içerik barındırması.
- Büyük/küçük harf:
/Blogve/blogfarklı URL'ler olarak değerlendirilir. - Çoklu dil versiyonları: Aynı dilde birden fazla URL.
Canonical Tag Nedir?
Canonical tag (rel="canonical"), arama motorlarına bir sayfanın tercih edilen (canonical) versiyonunu gösteren bir HTML link elementidir. Birden fazla URL aynı veya benzer içeriğe sahip olduğunda, canonical tag ile hangisinin indekslenmesi gerektiğini belirtirsiniz.
<!-- Sayfa: https://tariktunc.com/blog/canonical-url?ref=twitter -->
<head>
<link rel="canonical" href="https://tariktunc.com/blog/canonical-url">
</head>
<!-- Bu tag, Google'a şunu söyler:
"Bu sayfanın tercih edilen versiyonu
https://tariktunc.com/blog/canonical-url adresindedir.
İndeksleme ve sıralama için o URL'yi kullan." -->
Next.js'te Canonical URL Yönetimi
// app/blog/[slug]/page.tsx
import { Metadata } from 'next';
const BASE_URL = 'https://tariktunc.com';
export async function generateMetadata({ params }): Promise<Metadata> {
const post = await getPost(params.slug);
return {
title: post.title,
description: post.summary,
alternates: {
canonical: `${BASE_URL}/blog/${params.slug}`,
languages: {
'tr': `${BASE_URL}/blog/${params.slug}`,
'en': `${BASE_URL}/en/blog/${params.slug}`,
},
},
};
}
// middleware.ts - Trailing slash ve www yönlendirmesi
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const url = request.nextUrl.clone();
let shouldRedirect = false;
// Trailing slash kaldır
if (url.pathname !== '/' && url.pathname.endsWith('/')) {
url.pathname = url.pathname.slice(0, -1);
shouldRedirect = true;
}
// Büyük harfleri küçük harfe çevir
if (url.pathname !== url.pathname.toLowerCase()) {
url.pathname = url.pathname.toLowerCase();
shouldRedirect = true;
}
if (shouldRedirect) {
return NextResponse.redirect(url, 301);
}
return NextResponse.next();
}
HTTP Header ile Canonical Belirtme
HTML dışındaki kaynaklar (PDF, resim vb.) için HTTP header'ı ile canonical belirtebilirsiniz:
# Nginx konfigürasyonu
location /documents/ {
add_header Link '<https://tariktunc.com/documents/original.pdf>; rel="canonical"';
}
# Next.js API route
export async function GET(request: Request) {
return new Response(pdfBuffer, {
headers: {
'Content-Type': 'application/pdf',
'Link': '<https://tariktunc.com/docs/guide.pdf>; rel="canonical"',
},
});
}
301 vs Canonical: Hangisini Kullanmalı?
- 301 Redirect: İki URL'den biri artık kullanılmayacaksa. Kalıcı yönlendirme, link equity'yi aktarır.
- Canonical Tag: Her iki URL de erişilebilir kalacaksa (örn. parametre varyasyonları). Arama motoruna tercih bildirir.
- İkisi birlikte: Yönlendirme yapamadığınız durumlarda canonical kullanın; mümkün olduğunda 301 tercih edin.
Sık Yapılan Canonical Hataları
- Canonical zinciri: A canonical B, B canonical C. Dairesel veya zincir canonical'lar sorun yaratır.
- Noindex + canonical: Noindex sayfadan farklı bir URL'ye canonical vermek çelişkili sinyaldir.
- Relative URL: Canonical tag'te mutlaka absolute URL kullanın.
- Farklı içeriğe canonical: Tamamen farklı içeriklere sahip sayfalar arasında canonical kullanmayın.
- Sitemap ile uyumsuzluk: Sitemap'teki URL'ler canonical URL'lerle eşleşmelidir.
Sonuç
Duplicate content, farkında olunmadığında ciddi SEO sorunlarına yol açabilen yaygın bir problemdir. Canonical URL tag'leri, 301 yönlendirmeler ve tutarlı URL yapısı ile bu sorunları etkili şekilde çözebilirsiniz. Her sayfada self-referencing canonical kullanın, URL varyasyonlarını yönlendirmelerle normalize edin ve Google Search Console ile düzenli kontrol yapın.