.htaccess dosyası, Apache tabanlı web sunucularında dizin bazında davranış kurallarını tanımlamaya yarayan bir yapılandırma dosyasıdır. Adı “hypertext access” ifadesinden gelir. Sunucunun ana yapılandırma dosyalarına dokunmadan, yalnızca bulunduğu klasörü ve alt klasörleri etkileyecek kurallar yazmanıza izin verir. Yönlendirme, erişim kısıtlama, hata sayfası belirleme, sıkıştırma ve önbellek yönetimi gibi birçok işlem bu dosya üzerinden yürütülür. Teknik SEO açısından bakıldığında bu dosya, arama motoru botlarının ve kullanıcıların sitenize nasıl ulaşacağını belirleyen en kritik kontrol noktalarından biridir.
.htaccess Dosyası Nasıl Çalışır?
Sunucu, bir istek aldığında ilgili dizinden başlayarak kök dizine doğru .htaccess dosyalarını tarar ve bulduğu kuralları sırayla uygular. Dosya adı nokta ile başladığı için Linux sistemlerde gizli dosya sayılır. FTP istemcisinde veya hosting panelinin dosya yöneticisinde gizli dosyaların görünür olması gerekir. Dosya düz metin formatındadır, uzantısı yoktur ve genellikle sitenin kök dizini olan public_html veya www klasöründe bulunur.
Kurallar iki ana modül üzerinden işler. mod_rewrite modülü URL yeniden yazma ve koşullu yönlendirme işlemlerini yürütür. mod_alias modülü ise Redirect gibi daha basit yönlendirme komutlarını karşılar. Bunların yanında mod_headers, mod_expires, mod_deflate ve mod_authz_core gibi modüller başlık yönetimi, önbellekleme, sıkıştırma ve erişim denetimi için kullanılır. Bir komutun çalışması, ilgili modülün sunucuda etkin olmasına bağlıdır.
Hangi Sunucularda Geçerlidir?
.htaccess, Apache sunucusunun yerel bir özelliğidir. LiteSpeed sunucular dosyayı büyük ölçüde Apache uyumlu biçimde okur. Nginx ise bu dosyayı hiç okumaz. Nginx kullanan bir altyapıda aynı kurallar sunucu yapılandırma bloklarında yazılmalıdır. Hosting ortamınızı doğru tanımadan kural yazmak, hiçbir etki yaratmayan ya da sitenin çökmesine yol açan hatalara neden olabilir.
AllowOverride Ayarı ve Performans Etkisi
Sunucu yöneticisi, ana yapılandırmada AllowOverride yönergesini “None” olarak bırakmışsa .htaccess dosyasındaki kurallar yok sayılır. Ayrıca dosya her istekte okunduğu için yüzlerce satırlık karmaşık kurallar yanıt süresine küçük de olsa maliyet ekler. Sunucu yapılandırmasına erişiminiz varsa kalıcı kuralları oraya taşımak daha verimlidir. Paylaşımlı hosting kullanan sitelerde ise .htaccess pratik ve çoğu zaman tek seçenektir.
.htaccess Dosyası SEO İçin Neden Önemlidir?
Arama motorları, bir sitenin teknik tutarlılığını URL yapısı, yanıt kodları ve sayfa hızı üzerinden değerlendirir. Aynı içeriğe hem http hem https, hem www hem www’suz adresten ulaşılabilmesi sinyal bölünmesine yol açar. Yanlış kurulmuş bir yönlendirme zinciri tarama kaynağını tüketir ve link değerinin aktarımını zayıflatır. .htaccess bu sorunların neredeyse tamamını sunucu seviyesinde, sayfa içeriğine müdahale etmeden çözmenizi sağlar.
Dosyanın SEO’ya katkısı dört başlıkta toplanır. Birincisi, kanonik adres yapısının sunucu düzeyinde sabitlenmesidir. İkincisi, taşınan ya da silinen sayfaların doğru HTTP durum kodlarıyla yönetilmesidir. Üçüncüsü, sıkıştırma ve önbellek ayarlarıyla sayfa hızının iyileştirilmesidir. Dördüncüsü ise hassas dizinlerin ve istenmeyen botların kontrol altına alınmasıdır. Durum kodlarının arama motorları tarafından nasıl yorumlandığını ayrıntılı incelemek için HTTP durum kodları rehberimize göz atabilirsiniz.
301 Yönlendirmeleri ve Kanonik URL Yapısının Kurulması
301 yönlendirmesi, bir adresin kalıcı olarak başka bir adrese taşındığını bildirir ve arama motorlarına eski URL’nin sinyallerini yeni URL’ye aktarmaları gerektiğini söyler. Geçici değişiklikler için 302 kullanılır. Kalıcı taşımalarda 302 tercih etmek, arama motorunun eski adresi dizinde tutmasına neden olabilir. Bu yüzden her yönlendirmenin amacına uygun kodla tanımlanması gerekir.
HTTP’den HTTPS’e Geçiş
SSL sertifikası kurulduktan sonra tüm http isteklerinin https karşılığına yönlendirilmesi gerekir. Bunun için RewriteEngine On komutuyla motor etkinleştirilir, ardından RewriteCond ile bağlantının HTTPS olmadığı koşulu tanımlanır ve RewriteRule ile istek https adresine 301 koduyla gönderilir. Bu işlem tek adımda yapılmalıdır. Önce https’e, sonra www’ye giden iki aşamalı bir zincir hem hız kaybettirir hem de tarama bütçesini boşa harcar.
www ve www’suz Sürüm Tercihi
Sitenin yalnızca tek bir sürümü dizine girmelidir. Hangisini seçtiğinizden çok, seçiminizin tutarlı olması önemlidir. Tercih edilmeyen sürüm, RewriteCond ile ana bilgisayar adı kontrol edilerek tercih edilen sürüme 301 ile yönlendirilir. Bu kuralı HTTPS yönlendirmesiyle birleştirip tek bir kuralda toplamak zincir oluşumunu önler.
Sondaki Eğik Çizgi ve index Dosyaları
/kategori ile /kategori/ adreslerinin ikisinin de aynı içeriği döndürmesi kopya içerik riski doğurur. Bir standart belirleyip diğerini 301 ile ona yönlendirmeniz gerekir. Aynı mantık, ana sayfaya index.php veya index.html uzantısıyla ulaşılabildiği durumlar için de geçerlidir. Bu adresler kök dizine yönlendirilmelidir.
Sayfa Bazlı ve Toplu Yönlendirmeler
Tek bir sayfa taşındığında Redirect 301 komutu eski yolu yeni adrese bağlar. Binlerce URL’nin taşındığı durumlarda ise düzenli ifadeler (regex) içeren RewriteRule yapıları kullanılır. Yazım sırası burada belirleyicidir. Özel yönlendirmeler her zaman genel kurallardan önce gelmelidir. Aksi halde genel kural isteği yakalar ve özel kural hiç çalışmaz. Alan adı değişikliği gibi büyük ölçekli taşımalarda eşleştirme tablosu hazırlamak ve kuralları bu tabloya göre yazmak şarttır. Süreci baştan sona ele alan SEO’ya uygun domain değişikliği rehberi bu konuda tamamlayıcı bir kaynaktır.
Özel Hata Sayfaları ve Soft 404 Riski
ErrorDocument yönergesi, 404 veya 500 gibi hatalarda gösterilecek sayfayı belirler. Kullanıcı deneyimi açısından işlevsel bir 404 sayfası; arama kutusu, popüler kategoriler ve ana sayfa bağlantısı sunmalıdır. Burada kritik nokta, ErrorDocument komutunda tam bir URL yazılmamasıdır. Tam URL yazıldığında sunucu hata sayfasına 302 yönlendirmesi yapar ve ziyaretçi 200 koduyla karşılaşır. Bu da hatalı sayfaların geçerli içerik gibi algılanmasına yol açar. Doğru uygulama, sunucu içi dosya yolunu kullanmaktır, örneğin /404.html. Bu hatanın Search Console’daki sonuçlarını ve çözüm adımlarını Soft 404 hatası yazımızda bulabilirsiniz.
Kalıcı olarak kaldırılan ve yerine benzer içerik bulunmayan sayfalar için 410 (Gone) kodu da kullanılabilir. Bu kod, arama motoruna sayfanın bilinçli olarak silindiğini bildirir ve dizinden daha hızlı çıkarılmasına yardımcı olur. Gelişigüzel şekilde tüm eski sayfaların ana sayfaya yönlendirilmesi ise arama motorları tarafından çoğunlukla soft 404 olarak değerlendirilir ve önerilmez.
Sıkıştırma, Önbellek ve Hız Optimizasyonu
Sayfa hızı, hem kullanıcı deneyimi hem de Core Web Vitals metrikleri açısından sıralama sinyalleriyle ilişkilidir. .htaccess üzerinden yapılan üç ayar, ölçülebilir kazanımlar sağlar.
- Gzip veya Brotli sıkıştırma ile HTML, CSS, JavaScript ve JSON dosyaları transfer edilmeden önce küçültülür. mod_deflate veya mod_brotli modülleri bunun için kullanılır.
- Tarayıcı önbellekleme için mod_expires ile görsel, yazı tipi, CSS ve JS dosyalarına uzun geçerlilik süreleri tanımlanır. Değişmeyen statik dosyalar için bir yıllık süre yaygındır.
- Cache-Control başlıkları mod_headers ile eklenerek önbellek davranışı daha hassas yönetilir. Dosya adına sürüm parametresi eklemek, güncelleme sonrası eski dosyanın sunulmasını engeller.
- KeepAlive bağlantısı, aynı bağlantı üzerinden birden fazla isteğin taşınmasını sağlayarak gecikmeyi azaltır. Bu ayar sunucu düzeyinde etkinse başlık üzerinden desteklenir.
Modern görsel formatlarının sunulması da bu kapsamda değerlendirilir. Tarayıcı destekliyorsa JPEG veya PNG isteğine karşılık WebP dosyası döndürmek için Accept başlığını kontrol eden koşullu kurallar yazılabilir. Formatın avantajlarını ve doğru kullanımını WebP formatı içeriğimizde detaylandırdık. Yapılan değişikliklerin etkisini ölçmek için PageSpeed Insights raporunu okuma yöntemi iyi bir başlangıç noktasıdır.
Güvenlik ve Erişim Denetimi
.htaccess, güvenlik açısından da ilk savunma katmanlarından biridir. Options -Indexes komutu, dizinde index dosyası olmadığında klasör içeriğinin listelenmesini engeller. Bu, yüklenen dosyaların ve yapılandırma verilerinin dışarıdan görüntülenmesinin önüne geçer. wp-config.php gibi hassas dosyalara doğrudan erişim, FilesMatch bloğu içinde “Require all denied” yönergesiyle kapatılabilir. Eski Apache 2.2 sürümlerinde bu iş için “Deny from all” kullanılırdı. Sunucunuzun sürümüne uygun söz dizimini seçmek gerekir.
Zararlı trafik üreten IP adresleri RequireAll bloğu içinde “Require not ip” ile engellenebilir. Belirli bir yönetici IP’sine erişimi sınırlamak için de aynı mantık tersten uygulanır. Hotlinking, yani başka sitelerin görsellerinizi kendi sayfalarında sizin bant genişliğinizi kullanarak göstermesi, Referer kontrolü yapan RewriteCond kurallarıyla durdurulur. Ancak bu tür kısıtlamalarda Googlebot gibi meşru botların ve görsel arama sonuçlarının etkilenmediğinden emin olunmalıdır.
X-Robots-Tag ile Dizin Kontrolü
PDF, Word veya görsel gibi HTML olmayan dosyalara noindex etiketi eklenemez. Bu durumda mod_headers ile FilesMatch bloğu içinde X-Robots-Tag başlığı gönderilir. Böylece belirli dosya türlerinin arama sonuçlarında yer alması engellenir. Taramayı tamamen engelleyen robots.txt ile dizinden çıkarma talimatı veren başlıklar farklı işlevlere sahiptir. İkisinin farkını robots.txt dosyası rehberinde ayrıntılı biçimde bulabilirsiniz.
Sık Kullanılan Direktifler ve SEO Karşılıkları
Aşağıdaki tablo, günlük teknik SEO çalışmalarında en çok başvurulan yönergeleri, amaçlarını ve arama performansına etkilerini özetler.
| Direktif | Amaç | SEO Etkisi |
|---|---|---|
| RewriteRule … [R=301,L] | Kalıcı yönlendirme ve kanonik adres yapısı | Link değerinin aktarımı, kopya içeriğin önlenmesi |
| Redirect 301 | Tekil sayfa taşıma | Eski URL sinyallerinin yeni adrese devri |
| ErrorDocument | Özel hata sayfası tanımlama | Doğru 404 kodu ile soft 404 riskinin azalması |
| mod_deflate / mod_brotli | Metin tabanlı dosyaları sıkıştırma | Daha düşük transfer boyutu ve hızlı yükleme |
| mod_expires | Tarayıcı önbellek süresi belirleme | Tekrar ziyaretlerde hız artışı |
| Options -Indexes | Dizin listelemeyi kapatma | Hassas dosyaların dizine girmesinin önlenmesi |
| X-Robots-Tag | HTML dışı dosyalara dizin talimatı verme | İstenmeyen dosyaların sonuçlardan uzak tutulması |
Sık Yapılan Hatalar ve Güvenli Uygulama Yöntemi
En yaygın hata, dosyayı yedeklemeden düzenlemektir. Tek bir yanlış karakter, sitenin tamamında 500 Internal Server Error hatasına yol açabilir. Her değişiklikten önce mevcut dosyanın kopyasını almak ve kuralları küçük gruplar halinde ekleyip her adımdan sonra test etmek güvenli yöntemdir. Hata alınırsa sunucunun error log kaydı sorunun hangi satırdan kaynaklandığını gösterir.
İkinci yaygın sorun, yönlendirme zincirleri ve döngüleridir. A adresi B’ye, B adresi C’ye gidiyorsa her adım ek gecikme ve sinyal kaybı demektir. Döngüde ise tarayıcı “too many redirects” hatası verir ve sayfa açılmaz. Eski kuralların üzerine yenilerini eklemek yerine mevcut kuralları periyodik olarak gözden geçirip sadeleştirmek gerekir. Gereksiz tarama yükünü azaltmak ve botları değerli sayfalara odaklamak için tarama bütçesi optimizasyonu ilkelerini .htaccess denetimiyle birlikte ele almak faydalıdır.
Üçüncü hata, kuralların regex mantığını tam anlamadan kopyalanıp yapıştırılmasıdır. İnternette bulunan hazır kod parçaları farklı sunucu sürümleri ve CMS yapıları için yazılmış olabilir. Her kuralın ne yaptığını anlamak, test ortamında denemek ve canlı
ortama aktarmadan önce sonucu doğrulamak gerekir. Özellikle regex içeren yönlendirmelerde yanlış bir joker karakter, yüzlerce sayfanın yanlış adrese gitmesine neden olabilir. Kuralı yazan kişinin her satırın hangi isteği yakaladığını açıklayabilmesi, güvenli yapılandırmanın temel ölçütüdür.
WordPress ve Diğer CMS Yapılarında .htaccess Yönetimi
WordPress, kalıcı bağlantı yapısını çalıştırmak için .htaccess dosyasına kendi kural bloğunu ekler. Bu blok “# BEGIN WordPress” ve “# END WordPress” ifadeleri arasında yer alır. Kendi kurallarınızı bu işaretlerin dışına yazmalısınız. Aksi halde bağlantı ayarları kaydedildiğinde veya bir eklenti güncellendiğinde CMS bloğu yeniden yazılır ve kurallarınız silinebilir. Özel yönlendirmeleri bu bloğun üstüne yerleştirmek, işlem sırası açısından da doğrudur.
Yönlendirme, önbellek ve güvenlik eklentileri de aynı dosyaya otomatik kural ekler. Birden fazla eklentinin aynı sıkıştırma veya önbellek komutunu yazması çakışmalara yol açabilir. Bu nedenle dosyayı düzenli aralıklarla gözden geçirmek, aynı işi yapan tekrarlı blokları temizlemek ve hangi kuralın hangi eklentiye ait olduğunu not etmek gerekir. Dosya izinlerinin 644 olarak ayarlanması, yetkisiz yazma girişimlerine karşı ek bir önlemdir.
Değişiklikleri Test Etme ve İzleme
Bir kural yayına alındıktan sonra davranışı ölçmek, yazmak kadar önemlidir. Aşağıdaki adımlar, her değişiklik sonrası uygulanabilecek sade bir doğrulama sırası sunar.
- Eski ve yeni adresleri tarayıcı geliştirici araçlarının ağ sekmesinde açarak dönen durum kodunu kontrol edin. Tek adımlı bir 301 görmeniz gerekir.
- Http, https, www ve www’suz dört kombinasyonu ayrı ayrı deneyerek hepsinin tek bir kanonik adrese ulaştığını doğrulayın.
- Bir tarama aracıyla sitenin tamamını tarayıp yönlendirme zincirlerini, döngüleri ve 4xx ile 5xx yanıtlarını raporlayın.
- Search Console’da kapsam ve tarama istatistikleri raporlarını izleyerek hata sayısında artış olup olmadığını takip edin.
- Sunucu log kayıtlarında botların hangi adreslere hangi yanıt kodlarıyla ulaştığını inceleyin.
Büyük ölçekli yönlendirme değişikliklerinden sonra sıralama ve trafik dalgalanmaları birkaç hafta sürebilir. Bu dönemde acele müdahaleler yapmak yerine verileri düzenli aralıklarla karşılaştırmak ve gerçek bir sorun tespit edildiğinde yalnızca ilgili kuralı düzeltmek daha sağlıklıdır.
Kalıcı ve Sürdürülebilir Bir Yapılandırma İçin Temel İlkeler
İyi yönetilen bir .htaccess dosyası kısa, yorumlarla açıklanmış ve mantıksal bloklara ayrılmış olur. Yönlendirmeler, güvenlik kuralları, sıkıştırma ve önbellek ayarları ayrı başlıklar altında toplanmalı; her bloğun amacı satır başı açıklamalarla belirtilmelidir. Sürüm kontrolü veya tarih etiketli yedekler, olası bir hatada hızlı geri dönüş imkânı verir. Sunucu erişiminiz varsa değişmeyen kalıcı kuralların ana yapılandırmaya taşınması hem performans hem yönetilebilirlik açısından avantaj sağlar.
.htaccess dosyası, doğru kurulduğunda sitenin teknik temelini görünmez biçimde destekler. Kanonik URL yapısını sabitler, link değerinin kaybolmasını önler, sayfa hızını iyileştirir ve hassas alanları korur. Yanlış kurulduğunda ise tüm sitenin erişilebilirliğini tehlikeye atabilir. Bu nedenle her kuralı amacına, sunucu ortamına ve SEO hedeflerine göre değerlendirmek, değişiklikleri kontrollü biçimde uygulamak ve sonuçları ölçülebilir verilerle izlemek, kalıcı organik performansın en güvenilir yoludur.