Musa Yılmaz
·6 dk okuma

Vercel Custom Domain Çalışmıyor: DNS, SSL, Yönlendirme Rehberi

verceldnsdomainhata-ayiklama

Deployment kendi vercel.app adresinde çalışıyor ama kendi domaininiz "Invalid Configuration" gösteriyor, zaman aşımına düşüyor, sertifika hatası veriyor ya da yönlendirmeler arasında dönüp duruyor. "Custom domain çalışmıyor" en az beş ayrı arızayı kapsıyor ve birini düzeltmek bazen diğerini bozuyor. Bu yazı onları kontrol edeceğim sırayla diziyor.

Aşağıdaki Vercel bilgilerinin hepsi, Kasım 2026'da okuduğum domain dokümanlarından geliyor (sorun giderme sayfası Eylül 2026'da güncellenmiş). Kendi yaşadığım bir olayı anlatmıyorum; doküman temelli bir kontrol listesi bu. DNS ayrıntıları değişebilir, o yüzden panelle teyit edin.

Adım 0: domain ile deployment'ı ayırın

Aynı deployment'ın vercel.app adresini açın. Çalışıyorsa build sağlam, sorun domainde: DNS, sertifika ya da atama. Çalışmıyorsa sorun domain değil deployment'tadır (404 durumu için deploy sonrası NOT_FOUND yazıma bakın).

Vercel'in kendi ilk listesi kısa: domain projeye eklenmiş mi, Vercel'in verdiği CNAME ya da A kaydına doğru işaret ediyor mu (dig ile bakın), sorun yalnız sizde mi (tarayıcı önbelleğini temizleyin, DNS önbelleğini boşaltın).

Adım 1: kopyaladığınız değer değil, projenizin gösterdiği kayıtlar

Vercel ya A ya CNAME kaydı bekler. Doküman net: kesin değerler projenin Settings > Domains sayfasında, projeye ve plana göre gösteriliyor.

  • Apex domain (example.com): A kaydı. Apex'e CNAME koymak orada bulunması gereken diğer kayıtlarla (NS, çoğunlukla MX) çakışır; doküman bunun için RFC 1034'ü gösteriyor.
  • Alt alan adı (www.example.com): CNAME kaydı. Her projenin kendi hedef değeri var.

Vercel anycast adreslerini proje başına atıyor, yani A değeri projeler arasında farklı olabilir. Doküman, başka projeden ya da eski bir rehberden kopyalanan adresin domaini DNS Change Recommended, DNS Change Required ya da Invalid Configuration durumunda bırakabileceğini söylüyor. Kopyala-yapıştır rehberin tutmamasının en olası sebebi bu: bugün panelinizin gösterdiği değeri kullanın.

Eski kayıtları da silin. Apex için doküman, yenisini eklemeden önce diğer A ya da AAAA kayıtlarını kaldırmanızı söylüyor. Aynı hostname için kalan eski kayıt, ara sıra çalışıp ara sıra çalışmayan davranışın klasik sebebi.

Dokümanın andığı sözdizimi hataları

  • Name alanı: tam hostname değil, önek (www) olmalı. Vercel'in kendi DNS formu tam adı yapıştırırsanız alan adını siliyor; başka sağlayıcılar aynı davranmayabilir.
  • CNAME değerinin sonundaki nokta: Vercel'in verdiği hedef noktayla bitiyor, bu tam nitelikli ad demek. Değeri noktası dahil aynen kopyalayın.

Terminalden doğrulama

dig A example.com +short
dig CNAME www.example.com +short
curl -IL https://example.com

dig cevapları Settings > Domains'teki değerlerle eşleşmeli, curl HTTPS üzerinden ana domaininizde bitmeli. Vercel ayrıca nameserver kontrolü için dig ns example.com öneriyor.

Adım 2: doğru süre kadar bekleyin

Doküman, sıradan kayıtların (A, CNAME, TXT) önceki TTL'e bağlı olarak genelde hızlı yayıldığını, nameserver değişikliğinin ise 24-48 saati bulabildiğini söylüyor. Bu sürede farklı ziyaretçiler farklı şey görebilir. Site telefonun mobil verisinde açılıp evde açılmıyorsa eski önbellek makul bir şüpheli.

Aynı sayfadan bir ipucu: geçişten önce mevcut kaydın TTL'ini düşürün (örnek olarak 60 saniye), eski TTL dolana kadar bekleyin, sonra kaydı değiştirin. Geri dönüş hızlı olur. Sonra TTL'i eski değerine çıkarın.

Vercel ayrıca IPv6'yı henüz desteklemediğini belirtiyor; üçüncü taraf domain için ona AAAA kaydı yönlendiremezsiniz.

Adım 3: "domain başka hesapta kullanılıyor"

Bir domain aynı anda yalnız bir kişisel hesap ya da takıma bağlı olabilir. Eklerken "Another Vercel account is using this domain" hatası alırsanız doküman iki yol veriyor:

  • Diğer hesaba erişiminiz var: domaini Domains panelinden mevcut hesabınıza aktarın.
  • Domainin sahibisiniz ama diğer hesaba erişiminiz yok: Connect External ile verilen TXT kaydını ekleyip sahipliği doğrulayın.

Domain başka yerde kullanılıyorsa normal doğrulama için Vercel bir TXT kaydı ister; kayıt her zaman apex domainde _vercel adındadır. Bu, domaini hesabınıza taşımaz. Domaini projeden silip yeniden eklerseniz Vercel yeni bir değer üretir, kaydı güncelleyin.

Adım 4: sertifika sorunları

DNS doğru ama HTTPS çalışmıyorsa sıradaki şüpheli sertifika. Wildcard olmayan domainlerde Vercel varsayılan olarak HTTP-01 doğrulamasını kullanıyor ve domain gerçekten Vercel'e işaret ettiği sürece bunu otomatik hallediyor. Yani yanlış DNS ile eksik sertifika çoğu zaman aynı sorun.

Dokümanın saydıkları:

  • CAA kayıtları. Hiç CAA kaydı olmaması sertifikayı engellemez. Politikanız sertifika otoritesini kısıtlıyorsa Let's Encrypt'i 0 issue "letsencrypt.org" ile yetkilendirin. Hostname'de kayıt yoksa sorgu üst ada çıkar ve en yakın politika geçerli olur; politikalar birleştirilmez. dig CAA example.com +noall +answer ile bakın.
  • Aynı hostname'de CNAME ile CAA bir arada olamaz. Kendi CA politikanız gerekiyorsa doküman CNAME'i A kaydıyla değiştirmeyi öneriyor.
  • Wildcard DNS-01 doğrulaması ister; Vercel nameserver'larını kullanın ya da geçemiyorsanız _acme-challenge alt alanını NS kayıtlarıyla devredin.
  • Ayrılmış yol: /.well-known yönlendirilemez ya da yeniden yazılamaz.

ERR_SSL_PROTOCOL_ERROR için aynı tarayıcıda hatalı hostname ile vercel.app adresini karşılaştırın, sonra başka cihaz ve ağ deneyin. Doküman, kurumsal ya da okul ağının TLS denetimi veya filtreleme yüzünden hata verebileceğini, bunun sizin tarafınızdaki hiçbir ayarla çözülmediğini not ediyor.

Adım 5: Vercel'in önünde proxy

Cloudflare gibi bir proxy kullanıyorsanız hem sertifika hem yönlendirmeyi bozabilecek bir katman eklemişsiniz demektir. Vercel, projenin önüne reverse proxy konmasını önermediğini söylüyor. Yine de kullanacaksanız /.well-known/acme-challenge/* yolunu 80 portunda önbellek, kimlik doğrulama, rewrite ve yönlendirme olmadan Vercel'e ulaştırın ya da doğrudan "DNS only" kullanın.

Yönlendirme döngüsünün (ERR_TOO_MANY_REDIRECTS) belgelenmiş yaygın bir sebebi var: Cloudflare'in Flexible SSL/TLS modu. Tarayıcı Cloudflare'e HTTPS ile gelir, Cloudflare Vercel'e HTTP ile gider, Vercel HTTP'yi HTTPS'e yönlendirir ve döngü başlar. Vercel'in HTTP'den HTTPS'e yönlendirmesi kapatılamıyor; doküman geçerli bir origin sertifikasıyla Full (strict) kullanmanızı söylüyor. Döngü sürerse uygulamanızın kendi yönlendirmelerine ve domain yönlendirmelerine çakışan hedef var mı bakın.

Adım 6: www, apex ve yönlendirme

Apex çalışıp www çalışmıyorsa (ya da tersi) büyük olasılıkla yalnız birini eklemişsinizdir. İkisini de projeye ekleyin ve Settings > Domains > Edit > Redirect to altından birini diğerine yönlendirin. Vercel www'yu ana domain, çıplak domaini ona yönlendirilen olarak öneriyor, çünkü CNAME CDN'e sabit bir A kaydından daha fazla kontrol veriyor. Ters yön de çalışır.

Yapılandırılan domain otomatik olarak en güncel production deployment'a uygulanır. Farklı bir branch'e atanan domain, çözülmeden önce o branch'te yeni bir deployment ister.

Kontrol sırası

  1. vercel.app adresi çalışıyor mu? Çalışmıyorsa domain sorunu değil.
  2. Domain projeye ekli mi, kayıtlar Settings > Domains'tekiyle aynı mı?
  3. Kayıtları dig ile kontrol edin; eskileri silin; Name alanı ve sondaki noktaya bakın.
  4. Yayılma süresini tanıyın, nameserver değişiminde daha uzun.
  5. Domain başka yerde mi kullanılıyor? _vercel TXT'si ya da Connect External.
  6. Sertifika: CAA, doğrulama yolu, wildcard yöntemi.
  7. Proxy: DNS only ya da Full (strict).
  8. Apex ve www'yu ekleyin, sonra yönlendirmeyi kurun.

Özet

Vercel'de çalışmayan bir domain neredeyse her zaman şunlardan biridir: yanlış ya da eski DNS kayıtları, sahiplik çakışması, verilemeyen sertifika ya da araya giren bir proxy. Tahmin etmeyi bırakmanın en hızlı yolu önce üretilen vercel.app adresini denemek, sonra dig çıktısını kendi panelinizin gösterdiği değerlerle karşılaştırmak. Başka projeden ya da eski bir rehberden kayıt kopyalamayın.