Methodology v1.0
08 Ekim 2026 • By AICompatible Ekibi • 7 dk okuma

11 Dilde Aynı İçerik 'Kopya' Sayılıyordu: Canonical Etiket Eksikliği

11 Dilde Aynı İçerik 'Kopya' Sayılıyordu: Canonical Etiket Eksikliği

Sorunun Fark Edilişi: Google Search Console'da Garip Bir Düşüş

AICompatible.com'u 11 dilde yayına aldıktan yaklaşık 6 hafta sonra, Google Search Console'da tuhaf bir şey fark ettik: İngilizce sayfalarımız normal şekilde indekslenirken, Almanca, Fransızca ve İspanyolca versiyonlarımızın bir kısmı "Duplicate, Google chose different canonical than user" uyarısıyla işaretlenmişti. Daha da kötüsü, bazı Türkçe sayfalarımız hiç indekslenmemişti.

İlk başta hreflang etiketlerimizde bir sorun olduğunu düşündük. Ancak hreflang validator'ları her şeyin doğru olduğunu gösteriyordu. Asıl sorun başka bir yerdeydi: 1200'den fazla sayfamızda canonical etiketi hiç yoktu.

Teşhis: Canonical Eksikliğinin Yarattığı Kaos

Sorunu anlamak için önce bir İngilizce ve Almanca sayfa çiftini karşılaştırdık:

  • https://aicompatible.com/en/tools/chatgpt
  • https://aicompatible.com/de/tools/chatgpt

Her iki sayfanın kaynak koduna baktığımızda şunu gördük:

<head>
  <title>ChatGPT - AI Tool Directory</title>
  <link rel="alternate" hreflang="en" href="https://aicompatible.com/en/tools/chatgpt" />
  <link rel="alternate" hreflang="de" href="https://aicompatible.com/de/tools/chatgpt" />
  <link rel="alternate" hreflang="tr" href="https://aicompatible.com/tr/tools/chatgpt" />
  <!-- ... diğer diller -->
  <!-- ❌ Canonical etiketi YOK -->
</head>

Hreflang etiketleri mevcuttu, ancak canonical etiketi tamamen eksikti. Bu durumda Google şunu yapıyordu:

  1. 11 farklı dilde aynı içeriği (AI araç açıklamaları) görüyordu
  2. Hangi versiyonun "orijinal" olduğunu bilemiyordu
  3. Kendi başına bir canonical seçmeye çalışıyordu (genellikle İngilizce)
  4. Diğer dil versiyonlarını ya "duplicate content" olarak işaretliyor ya da indekslemiyordu

Screaming Frog ile tam bir tarama yaptığımızda durum daha da netleşti: 1247 HTML sayfanın hiçbirinde canonical etiketi yoktu. Sitemizdeki her araç sayfası, her kategori sayfası, her blog yazısı—11 dilde çarpı yüzlerce sayfa—hepsi canonical'sız duruyordu.

Teknik Çözüm: 1200+ Sayfaya Toplu Canonical Ekleme

Manuel olarak 1200+ sayfayı düzenlemek imkansızdı. FTP üzerinden otomatik bir çözüm geliştirdik. İşte adım adım uyguladığımız yöntem:

1. Mevcut Yapının Analizi

Tüm HTML dosyalarımız şu yapıdaydı:

/public_html/
  ├── en/
  │   ├── tools/
  │   │   ├── chatgpt.html
  │   │   └── midjourney.html
  │   └── blog/
  ├── de/
  │   ├── tools/
  │   └── blog/
  └── tr/
      ├── tools/
      └── blog/

2. Self-Referencing Canonical Mantığı

Her sayfa kendi URL'sine işaret eden bir canonical içermeliydi. Yani:

  • /en/tools/chatgpt.html → canonical: https://aicompatible.com/en/tools/chatgpt
  • /de/tools/chatgpt.html → canonical: https://aicompatible.com/de/tools/chatgpt
  • /tr/tools/chatgpt.html → canonical: https://aicompatible.com/tr/tools/chatgpt

Önemli: Çok dilli sitelerde yaygın bir hata, tüm dillerin canonical'ını İngilizce versiyona yönlendirmektir. Bu tamamen yanlış! Her dil kendi canonical'ına sahip olmalı, hreflang etiketleri zaten diller arası ilişkiyi tanımlar.

3. Python Script ile Toplu Güncelleme

FTP'ye bağlanıp tüm HTML dosyalarını güncelleyen bir Python scripti yazdık:

import os
import re
from ftplib import FTP

def add_canonical(html_content, file_path):
    # Dosya yolundan URL'yi oluştur
    # Örnek: /public_html/tr/tools/chatgpt.html → /tr/tools/chatgpt
    url_path = file_path.replace('/public_html', '').replace('.html', '')
    canonical_url = f'https://aicompatible.com{url_path}'
    
    # Canonical etiketini oluştur
    canonical_tag = f'  <link rel="canonical" href="{canonical_url}" />\n'
    
    # <head> etiketinden sonra ekle (title'dan önce)
    pattern = r'(<head>\s*\n)'
    replacement = r'\1' + canonical_tag
    
    return re.sub(pattern, replacement, html_content, count=1)

# FTP bağlantısı
ftp = FTP('ftp.aicompatible.com')
ftp.login('username', 'password')

# Tüm HTML dosyalarını tara
languages = ['en', 'de', 'tr', 'fr', 'es', 'it', 'pt', 'pl', 'nl', 'ja', 'ko']
updated_count = 0

for lang in languages:
    ftp.cwd(f'/public_html/{lang}')
    
    for root, dirs, files in os.walk(f'./{lang}'):
        for file in files:
            if file.endswith('.html'):
                file_path = os.path.join(root, file)
                
                # Dosyayı indir
                with open('temp.html', 'wb') as f:
                    ftp.retrbinary(f'RETR {file_path}', f.write)
                
                # İçeriği oku ve canonical ekle
                with open('temp.html', 'r', encoding='utf-8') as f:
                    content = f.read()
                
                # Canonical zaten varsa atla
                if 'rel="canonical"' not in content:
                    updated_content = add_canonical(content, file_path)
                    
                    # Güncellenmiş dosyayı yükle
                    with open('temp.html', 'w', encoding='utf-8') as f:
                        f.write(updated_content)
                    
                    with open('temp.html', 'rb') as f:
                        ftp.storbinary(f'STOR {file_path}', f)
                    
                    updated_count += 1
                    print(f'✓ {file_path}')

print(f'\n✅ {updated_count} dosya güncellendi.')
ftp.quit()

4. Sonuç: Doğru Canonical Yapısı

Script çalıştıktan sonra her sayfa şu yapıya kavuştu:

<head>
  <link rel="canonical" href="https://aicompatible.com/tr/tools/chatgpt" />
  <title>ChatGPT - Yapay Zeka Araç Rehberi</title>
  <link rel="alternate" hreflang="en" href="https://aicompatible.com/en/tools/chatgpt" />
  <link rel="alternate" hreflang="de" href="https://aicompatible.com/de/tools/chatgpt" />
  <link rel="alternate" hreflang="tr" href="https://aicompatible.com/tr/tools/chatgpt" />
  <!-- ... -->
</head>

Sonuç ve Öğrendiklerimiz

Canonical etiketlerini ekledikten 2 hafta sonra Google Search Console'daki "duplicate content" uyarıları %87 azaldı. Almanca ve Fransızca sayfalarımız düzgün şekilde indekslenmeye başladı. Organik trafiğimiz 3 hafta içinde %34 arttı.

Bu sorun sadece bizde değil: Çok dilli sitelerin çoğunda canonical etiketleri ya tamamen eksik ya da yanlış yapılandırılmış. Özellikle şu hatalar çok yaygın:

  • Tüm dillerin canonical'ı tek bir dile (genellikle İngilizce) yönlendiriliyor
  • Canonical var ama self-referencing değil (başka bir sayfaya işaret ediyor)
  • Canonical URL'leri http/https veya www/non-www tutarsızlığı içeriyor

Kendi sitenizi kontrol etmek için: Tarayıcınızda bir sayfanın kaynak kodunu açın (Ctrl+U) ve <link rel="canonical" araması yapın. Etiket yoksa veya yanlış URL'ye işaret ediyorsa, arama motorları sayfalarınızı doğru değerlendiremiyordur.

AICompatible.com'un otomatik tarayıcısı, sitenizdeki tüm sayfaları tarayarak canonical etiketlerinin varlığını, doğruluğunu ve hreflang etiketleriyle uyumunu kontrol eder. Çok dilli siteler için özel olarak tasarlanmış raporlar, hangi sayfalarda hangi SEO etiketlerinin eksik veya hatalı olduğunu gösterir—böylece bizim gibi 1200 sayfayı manuel kontrol etmek zorunda kalmazsınız.