Web dünyasında, kullanıcıların gördüğü ön yüzün arkasında her zaman karmaşık ve güçlü bir yapı işler. Bu yapının en kritik parçalarından biri, Apache tabanlı sunucularda web sitenizin davranışlarını belirleyen .htaccess (Hypertext Access) dosyasıdır. Teknik SEO çalışmalarının temel taşlarından biri olan bu dosya, sadece basit bir metin belgesi gibi görünse de sitenizin hızı, güvenliği ve arama motoru dostu (SEO-friendly) olması üzerinde devasa bir etkiye sahiptir. Seojen.com olarak hazırladığımız bu rehberde, alan adı değişikliklerinden SSL yönlendirmelerine kadar her detayı derinlemesine inceleyeceğiz.
.htaccess, Apache web sunucusu yazılımını çalıştıran sistemlerde kullanılan, dizin düzeyinde konfigürasyon yapılmasını sağlayan bir yapılandırma dosyasıdır. "Hypertext Access" ifadesinin kısaltması olan bu dosya, sunucu ana yapılandırma dosyalarına (httpd.conf gibi) erişiminiz olmasa bile sitenizin kök dizini veya alt dizinleri için özel kurallar tanımlamanıza olanak tanır. Genellikle Linux tabanlı sunucularda karşımıza çıkar ve bir sitenin "trafik polisi" görevini üstlenir.
Teknik bir bakış açısıyla .htaccess, noktayla başlayan bir dosya adı formatına sahiptir. Bu, onun bir "gizli dosya" olduğunu gösterir. FTP programlarında veya dosya yöneticilerinde varsayılan olarak gizli olabilir. Bu dosya, sunucuya her istek geldiğinde okunur; dolayısıyla yapılan değişiklikler sunucuyu yeniden başlatmaya gerek kalmadan anında aktif olur. SEO uzmanları için bu dosya, sitenin hiyerarşisini ve tarama bütçesini yönetmek için kullanılan en güçlü araçtır.
.htaccess dosyası, bir web sitesinin sunucu tarafındaki yönetim kabiliyetini maksimize eder. Temel işlevi, web sunucusuna belirli istekler geldiğinde nasıl davranması gerektiğini komutlarla bildirmektir. SEO performansı için vazgeçilmez olan bu dosyanın sağladığı temel işlevleri şu tabloda görebiliriz:
| Fonksiyon | SEO ve Kullanıcı Deneyimine Katkısı |
| URL Yönlendirme | Kırık linkleri (404) önler, otorite kaybını engeller. |
| Giriş Kontrolü | Belirli IP'leri engelleyerek site güvenliğini sağlar. |
| Önbellekleme (Caching) | Site hızını artırır, sunucu yükünü azaltır. |
| Özel Hata Sayfaları | Kullanıcıyı hata anında anlamlı sayfalara yönlendirir. |
| Güvenlik | Dizin listelemeyi kapatır, dosya erişimlerini kısıtlar. |
Bunların ötesinde .htaccess, sitenizin "kalıcı yönlendirme" (301) işlemlerini yaparak eski URL otoritesini yeni URL'ye aktarmanızı sağlar. Ayrıca içeriklerin sıkıştırılması (Gzip) ve SSL sertifikasının zorunlu kılınması gibi teknik optimizasyonlar da bu dosya üzerinden yürütülür.
Birçok kullanıcı web sitesinin dosyalarına baktığında bu dosyayı hemen göremeyebilir. .htaccess dosyası, web sitenizin ana dizininde (root directory) bulunur. Bu dizin sunucu tipine göre genellikle public_html, httpdocs, www veya wwwroot olarak adlandırılır. Dosyanın başında bulunan nokta (.) işareti, sistem tarafından gizli dosya olarak algılanmasına neden olur.
Dosyaya ulaşmak için FTP (FileZilla vb.) veya cPanel/Plesk dosya yöneticisini kullanırken "Gizli Dosyaları Göster" (Show Hidden Files) seçeneğinin aktif olduğundan emin olmalısınız. Eğer ana dizinde böyle bir dosya yoksa, kendiniz not defteri ile oluşturup kaydedebilirsiniz. Ancak mevcut bir dosya varsa, üzerinde işlem yapmadan önce mutlaka yedeğini almalısınız; çünkü yanlış bir komut sitenizin tamamen erişilemez hale gelmesine (Internal Server Error) neden olabilir.



Site yönlendirme, bir alan adının (domain) tüm içeriğinin başka bir alan adına aktarılması sürecidir. Bu işlem genellikle marka değişikliği veya alan adı transferlerinde tercih edilir. Sadece alan adı panelinden yapılan yönlendirmeler genellikle "maskeleme" yapar veya alt sayfaların otoritesini korumaz. Ancak .htaccess ile yapılan yönlendirme, her sayfayı karşılığındaki yeni sayfaya iletir.
Tüm web sitesini yeni bir adrese yönlendirmek için aşağıdaki kod bloğu kullanılır:
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.yenisiteniz.com/$1 [R=301,L]
Bu kod sayesinde, kullanıcı eskisite.com/hizmetler adresine girdiğinde otomatik olarak yenisite.com/hizmetler adresine gider. Bu yöntem, SEO açısından sitenizin kazandığı tüm backlink ve otorite değerlerini kaybetmeden yeni adresinize aktarmanızı sağlayan en sağlıklı yoldur.
Web sitenizde zamanla sayfaların URL yapısı değişebilir veya bazı sayfaları tamamen silebilirsiniz. Bu durumda kullanıcıların ve Google botlarının 404 hata sayfasıyla karşılaşmaması için URL yönlendirme yapılması gerekir. Tek bir sayfayı başka bir sayfaya yönlendirmek için Redirect 301 komutu en pratik çözümdür.
Örnek kod kullanımı:
Redirect 301 /eski-sayfa-urlsi /yeni-sayfa-urlsi
Bu komutu uygularken dikkat etmeniz gereken nokta, eski sayfanın sadece kök dizinden sonraki kısmını, yeni sayfanın ise tam URL'sini veya kök dizinden sonraki yolunu yazmaktır. Eğer hedef başka bir web sitesiyse mutlaka https://www.site.com/hedef şeklinde tam protokol yazılmalıdır. Bu işlem, kullanıcıyı istediği içeriğe ulaştırarak hemen çıkma oranını (bounce rate) düşürür ve SEO puanınızı korur.
Arama motorları, bir web sitesinin www olan ve olmayan versiyonlarını iki farklı site olarak algılayabilir. Bu durum "duplicate content" (yinelenen içerik) sorununa yol açarak SEO gücünüzün bölünmesine neden olur. Sitenizin tek bir versiyon üzerinden yayın yapması için www yönlendirmesi yapmalısınız.
Sitenizi www'li kullanmak istiyorsanız:
RewriteEngine on RewriteCond %{HTTP_HOST} ^websiteniz.com [NC] RewriteRule ^(.*)$ http://www.websiteniz.com/$1 [L,R=301,NC]
Sitenizi www'siz kullanmak istiyorsanız:
RewriteEngine on RewriteCond %{HTTP_HOST} ^www.websiteniz.com [NC] RewriteRule ^(.*)$ http://websiteniz.com/$1 [L,R=301,NC]
Bu kodlar, sunucunuza gelen tüm istekleri belirlediğiniz standart yapıya zorlar. Böylece backlink gücünüz tek bir URL yapısında toplanır ve otoriteniz maksimize edilir.
SSL sertifikası (HTTPS), 2026 yılı itibarıyla tüm web siteleri için bir zorunluluktur. Güvenli olmayan (HTTP) bağlantıları otomatik olarak güvenli (HTTPS) bağlantıya yönlendirmek, hem kullanıcı güveni hem de Google sıralamaları için kritiktir. http https yönlendirmesi, SSL sertifikanız yüklü olsa bile kullanıcıların yanlışlıkla güvenli olmayan yoldan girmesini engeller.
HTTPS yönlendirmesi için şu kodu kullanabilirsiniz:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Bu kodun çalışması için sunucunuzda SSL sertifikasının aktif olması gerekir. Aksi takdirde site "güvenli bağlantı hatası" verecektir. Bu yönlendirme yapıldıktan sonra Google Search Console üzerinden de mülkiyetin HTTPS versiyonunun doğrulandığından emin olmalısınız.
Birçok webmaster, alan adını yönlendirirken alt sayfaların (slash sonrası kısımların) kaybolmasından endişe eder. Slash (/) yönlendirmesi, eski alan adınızdaki binlerce alt sayfanın, yeni alan adınızdaki aynı yapıya birebir aktarılmasını sağlar. Bu, link inşasını korumak için hayati bir işlemdir.
Örnek senaryo: eskisite.com/iletisim adresinin yenisite.com/iletisim adresine gitmesini istiyorsunuz.
Kod:
Redirect 301 / https://yenisiteniz.com
Buradaki / simgesi "kök dizinden itibaren her şeyi yakala ve karşı tarafa ekle" anlamına gelir. Eğer bu işlemi yapmazsanız, Google üzerindeki eski linklerinize tıklayan ziyaretçiler sadece yeni sitenizin ana sayfasına gider ve aradıkları içeriği bulamadıkları için siteyi terk ederler. Bu durum, SEO performansınıza büyük bir darbe vurur.
301 yönlendirmesi, bir içeriğin "kalıcı olarak" taşındığını belirten HTTP durum kodudur. Geçici yönlendirmelerden (302) farkı, eski sayfanın sahip olduğu tüm SEO otoritesini, PageRank değerini ve backlink gücünü yeni sayfaya aktarmasıdır. SEO dünyasında "kalıcı yönlendirme" denildiğinde akla ilk gelen yöntem .htaccess dosyasıdır.
301 yönlendirmesi yapmanın en yaygın yolları şunlardır:
Tek Sayfa: Redirect 301 /eski /yeni
Alan Adı: RewriteRule (.*) http://yeni.com/$1 [R=301,L]
Dizini Yönlendirme: /eski-kategori/ altındaki her şeyi /yeni-kategori/ye taşımak için kompleks RewriteRulelar kullanılabilir.
301 yönlendirmesi yapılırken döngü (loop) oluşmamasına dikkat edilmelidir. Yani A sayfasını B'ye, B sayfasını tekrar A'ya yönlendirirseniz tarayıcılar hata verecektir.
Bazen yanlış yapılan yönlendirmeleri geri almak veya geçici bir süre için yapılan yönlendirmeyi iptal etmek gerekebilir. .htaccess yönlendirme kaldırma işlemi oldukça basittir; eklediğiniz kod satırlarını dosyadan silmeniz veya satırın başına # işareti koyarak (yorum satırı yaparak) etkisiz hale getirmeniz yeterlidir.
Ancak burada kritik bir sorun vardır: Tarayıcı Önbelleği. 301 yönlendirmeleri "kalıcı" olduğu için tarayıcılar bu kuralı önbelleğe alır. Siz kodu silseniz bile, daha önce sitenizi ziyaret etmiş bir kullanıcı hala eski yönlendirmeye maruz kalabilir. Bu durumu çözmek için tarayıcı önbelleğini temizlemeli veya sunucu tarafında önbellek (cache) temizliği yapmalısınız. Eğer yönlendirmeyi tamamen kaldırmak yerine değiştirmek istiyorsanız, kodu güncelleyip dosyayı tekrar yüklemeniz kafidir.
Eğer .htaccess dosyasında bir yazım hatası yaparsanız veya sunucunun desteklemediği bir modülü çağırmaya çalışırsanız, web siteniz anında "500 Internal Server Error" hatası verecektir. Bu durum sitenizin tamamen erişilemez olduğu anlamına gelir. Bu yüzden düzenleme yapmadan önce mevcut dosyanın yedeğini almalı, hata aldığınızda ise dosyayı eski haline döndürmelisiniz.
Sunucu düzeyinde (.htaccess) yapılan yönlendirmeler, sayfa içeriği henüz yüklenmeden (server-side) gerçekleşir. Bu, en hızlı yönlendirme yöntemidir. PHP veya JS yönlendirmelerinde sayfanın bir kısmının yüklenmesi gerekir ki bu da hem hız kaybına hem de SEO otoritesinin eksik aktarılmasına neden olabilir. Google, sunucu düzeyindeki 301 yönlendirmelerini daha güvenilir bulur.
Google'ın son güncellemelerine göre 301 yönlendirmeleri PageRank gücünü çok büyük oranda (bazı uzmanlara göre %90-99 arası) aktarır. Ancak yönlendirme zincirleri (A -> B -> C -> D) oluşturmaktan kaçınmalısınız. Her yönlendirme adımı çok küçük bir güç kaybına ve tarama süresinde artışa neden olabilir.
Evet, .htaccess Apache, Litespeed ve Nginx (bazı konfigürasyonlarla) gibi web sunucularında çalışan Linux tabanlı sistemlere özgüdür. Windows tabanlı IIS sunucularda bu işlemin karşılığı web.config dosyasıdır. Siteniz Linux/cPanel barındırma hizmetindeyse .htaccess kullanabilirsiniz.
Bilgisayarınızda boş bir not defteri açın, içine gerekli kodları yazın ve dosyayı htaccess.txt adıyla kaydedin. FTP üzerinden sitenizin ana dizinine yükledikten sonra adını .htaccess (başında nokta olacak şekilde) olarak değiştirin. Bazı işletim sistemleri başında nokta olan dosya oluşturmanıza izin vermediği için bu yöntemi kullanmalısınız.
Site hızını artırmak için Gzip sıkıştırması çok önemlidir. .htaccess dosyasına mod_deflate komutlarını ekleyerek metin tabanlı dosyalarınızın (HTML, CSS, JS) sıkıştırılarak gönderilmesini sağlayabilirsiniz. Bu, SEO puanınızı doğrudan etkileyen "LCP" değerini iyileştirir.
Evet, her dizin için ayrı bir .htaccess dosyası bulunabilir. Alt dizindeki dosya, ana dizindeki kuralları o dizin için geçersiz kılabilir veya üzerine ek kurallar ekleyebilir. Ancak yönetimi kolaylaştırmak ve çakışmaları önlemek adına tüm yönlendirmelerin ana dizindeki tek bir dosyada toplanması önerilir.
Sitenize saldırı yapan veya içeriklerinizi botlarla çeken belirli bir IP adresini engellemek için Order Deny,Allow ve Deny from IP_ADRESI komutlarını kullanabilirsiniz. Bu, sitenizin güvenliğini artırırken gereksiz tarama yükünü de hafifletir.
301 yönlendirmesi "kalıcı"dır (Moved Permanently), 302 ise "geçici"dir (Found/Moved Temporarily). SEO için hayati olan fark; 301'in link otoritesini aktarması, 302'nin ise aktarmamasıdır. Sayfanızın adresi tamamen değiştiyse mutlaka 301 kullanmalısınız.
Eğer eski URL'leri yeni URL'lere .htaccess üzerinden 301 ile doğru şekilde yönlendirirseniz, kısa süreli bir dalgalanma dışında sıralama kaybetmezsiniz. Google botları yönlendirmeyi fark ettiğinde eski sayfayı dizinden silip yeni sayfayı onun yerine konumlandıracaktır.
Hayır, sunucu yapılandırmasında özel bir değişiklik yapılmadığı sürece Apache sunucuları sadece .htaccess ismindeki dosyayı kural olarak kabul eder. İsimdeki en küçük hata (örneğin htaces.txt) dosyanın çalışmamasına neden olur.
Güvenlik için, bir klasörde index.php veya index.html yoksa o klasördeki tüm dosyaların listelenmesini engellemelisiniz. Bunun için dosyaya Options -Indexes satırını eklemeniz yeterlidir.
Bu durum genellikle "Mixed Content" (Karma İçerik) hatasından kaynaklanır. .htaccess ile siteyi HTTPS'ye zorlasanız bile, sayfa içindeki resim veya script linkleri hala http:// ile başlıyorsa tarayıcılar uyarı verir. Site içindeki tüm linklerin de güncellenmesi gerekir.
Bu komut, .htaccess içindeki yeniden yazma ve yönlendirme modülünü (mod_rewrite) aktif hale getirir. Bu satır olmadan RewriteRule veya RewriteCond içeren hiçbir komut çalışmayacaktır. Genellikle dosyanın en başında bir kez yazılması yeterlidir.
URL'lerdeki büyük/küçük harf karmaşasını önlemek için [NC] (No Case) bayrağını kullanabilirsiniz. Bu, sunucunun gelen isteği harf büyüklüğüne bakmaksızın eşleştirmesini sağlar.
Evet, başka sitelerin sizin resimlerinizi doğrudan link vererek kendi sitelerinde göstermesini (ve sizin bant genişliğinizi tüketmesini) .htaccess kuralları ile engelleyebilir, sadece kendi alan adınıza izin verebilirsiniz.
Bir alan adındaki tüm içeriklerin, hedef alan adındaki birebir karşılıklarına yönlendirilmesine denir. Yukarıda bahsettiğimiz (.*) kuralı bir wildcard yönlendirmedir. SEO otorite aktarımı için en kritik tekniktir.
WordPress'te de ana dizinde (wp-config.php'nin yanında) bulunur. WordPress, kalıcı bağlantı (permalink) ayarlarını kaydettiğinizde bu dosyayı otomatik olarak günceller. Manuel müdahale yaparken WordPress'in oluşturduğu # BEGIN WordPress ve # END WordPress satırlarının dışına yazmanız önerilir.
Evet, Litespeed sunucular Apache ile %100 uyumlu olduğu için .htaccess dosyasını ve içindeki tüm kuralları sorunsuz bir şekilde işler. Hatta Litespeed, bu kuralları bazen Apache'den daha hızlı yorumlayabilir.
Sadece .jpg, .png gibi uzantılara gelen istekleri farklı bir CDN veya sunucu adresine yönlendirmek için özel RewriteRule tanımları yapabilirsiniz. Bu, yük dengeleme (load balancing) için kullanılan ileri düzey bir tekniktir.
Kullanıcılara sıkıcı beyaz bir ekran yerine markanıza uygun bir sayfa göstermek için ErrorDocument 404 /404-sayfasi.html komutunu kullanabilirsiniz. Bu, kullanıcıyı sitede tutmak için harika bir UX stratejisidir.
ExpiresDefault komutlarını kullanarak tarayıcı önbellekleme (Browser Caching) sürelerini belirleyebilirsiniz. Örneğin resimlerin 1 ay boyunca kullanıcının bilgisayarında saklanmasını sağlayarak, sonraki ziyaretlerde sitenin çok daha hızlı açılmasını sağlarsınız.
Eğer A sayfası B'ye, B sayfası da A'ya yönlenmişse tarayıcı sonsuz bir döngüye girer ve "ERR_TOO_MANY_REDIRECTS" hatası verir. Bu, genellikle yanlış yazılan regex kurallarından veya çakışan yönlendirmelerden kaynaklanır.
"Last" (Son) anlamına gelir. Sunucuya, eğer bu kural eşleşirse dosyada aşağıda kalan diğer kuralları işleme almayı bırakmasını söyler. Çakışmaları önlemek için her yönlendirme kuralının sonunda kullanılması önerilir.
Eğer alt sayfaların kalmasını, sadece ana sayfanın yönlenmesini istiyorsanız: RedirectMatch exact ^/$ http://yenisite.com komutunu kullanabilirsiniz.
Çok uzun (binlerce satırlık) .htaccess dosyaları sunucunun her istekte bu dosyayı okuması nedeniyle milisaniyelik gecikmelere neden olabilir. Ancak standart bir SEO yapılandırması (50-100 satır) hissedilir bir yavaşlama yaratmaz.
.htaccess içindeki karmaşık yönlendirmeleri yazmak için kullanılan bir sembol dilidir. ^, $, .*, + gibi semboller URL kalıplarını tanımlar. .htaccess'in gücü bu esnek Regex yapısından gelir.
Nginx varsayılan olarak .htaccess dosyasını okumaz. Nginx kullanıyorsanız kuralları sunucunun ana konfigürasyon dosyasına (nginx.conf) Nginx formatında yazmanız gerekir. Ancak Litespeed veya Apache kullanıyorsanız sorunsuz çalışacaktır.
RewriteCond %{REMOTE_ADDR} !^Kendi_IP_Adresiniz$ komutu ile kendi erişiminizi açık tutup, diğer tüm trafiği bakimda.html sayfasına yönlendirebilirsiniz.
Googlebot sitenizi ziyaret edip 301 kodunu gördüğü anda işlemi fark eder. Ancak tüm dizinin (index) güncellenmesi ve sıralamaların yeni URL'ye oturması sitenizin büyüklüğüne göre birkaç günden birkaç haftaya kadar sürebilir.
Yorum Yap