İçeriğe geç
SEO

Canonical URL ve Duplicate Content Çözümleri

Tarık Tunç
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.com ve site.com aynı içeriğe hizmet eder.
  • HTTP vs HTTPS: Her iki protokolden de erişilebilir sayfalar.
  • Trailing slash: /blog ve /blog/ farklı URL'ler olarak algılanır.
  • Query parametreleri: /products?sort=price, /products?sort=name aynı ürün listesi.
  • Pagination: Sayfalanmış listelerin benzer içerik barındırması.
  • Büyük/küçük harf: /Blog ve /blog farklı 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." -->
İpucu: Her sayfada mutlaka bir canonical tag bulunmalıdır; kendine referans veren (self-referencing) canonical tag'ler bile en iyi pratik olarak kabul edilir. Bu, arama motorlarının sayfanızın tercih edilen URL'sinden asla şüphe duymamasını sağlar.

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"',
    },
  });
}
Uyarı: Canonical tag bir ipucu (hint) niteliğindedir, direktif değildir. Google canonical tag'inizi görmezden gelebilir ve kendi belirlediği canonical URL'yi tercih edebilir. Canonical tag'in etkili olması için hedef sayfanın erişilebilir, indekslenebilir ve içerik olarak uyumlu olması gerekir.

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.
Bilgi: Google Search Console'un "Page Indexing" raporunda "Duplicate without user-selected canonical" ve "Alternate page with proper canonical tag" bildirimlerini takip ederek duplicate content sorunlarınızı izleyebilirsiniz.

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.

Kaynaklar

İlgili Yazılar