Vercel'de Site Yayınlama: Ücretsiz Planın Gerçek Sınırları
Vercel'de site yayınlama işinin ücretsiz planla yapılabildiğini çoğu kişi biliyor; bilinmeyen, o ücretsiz planın nerede bittiği. Hobby planı kişisel bir siteyi veya portföyü yayında tutmak için fazlasıyla yeterlidir, ama "ücretsiz" olmasının bazı koşulları ve kolayca gözden kaçan yapılandırma detayları var. Bu yazıda hem sağlam bir kurulumun nasıl yapılacağını hem de ücretsiz planın gerçek sınırlarını sayılarla anlatıyorum.
Önce lisans koşulu
Hobby planı ticari olmayan kullanım içindir. Kişisel portföy, blog veya yan proje uygundur. Ancak site bir işletmenin ana sitesiyse veya doğrudan gelir üretiyorsa Pro plana geçmek gerekir.
Portföy sitesi üzerinden freelance iş almak gri bir alandır; site bir hizmet satmıyor, sizi tanıtıyorsa genelde sorun olmaz. Ciddi bir ticari faaliyet söz konusuysa koşulları kontrol edin.
Domain bağlama
Vercel projenizde Settings → Domains bölümünden alan adınızı ekleyin. Vercel size bir DNS kaydı verecektir.
Apex domain (example.com) için genelde bir CNAME kaydı istenir. Bu, klasik DNS kurallarına aykırı görünür — normalde apex'te CNAME olmaz. Cloudflare gibi sağlayıcılar "CNAME flattening" ile bunu destekler, bu yüzden çalışır.
Kritik ayrıntı: Cloudflare kullanıyorsanız bu kaydın proxy'sini (turuncu bulut) kapatın, "DNS only" moduna alın. Proxy açıkken Vercel kendi SSL sertifikasını doğrulayamaz.
www ile www'suz sürüm arasında birini seçin. İkisi de aynı içeriği sunarsa arama motorları için duplicate content oluşur. Vercel domain eklerken "Redirect apex domains to www" seçeneği sunar; hangisini ana adres yapacağınıza karar verip diğerini ona yönlendirin.
Önizleme dağıtımları ve SEO
Vercel her push için bir önizleme adresi üretir. Bu adresler herkese açıksa, arama motorları onları da indeksleyebilir ve asıl sitenizle içerik çakışması yaratır.
Settings → Deployment Protection bölümünden "Vercel Authentication" ayarını açık tutun. Böylece önizleme adreslerini yalnızca giriş yapmış takım üyeleri görür. Production domain'iniz bundan etkilenmez.
Ek olarak, *.vercel.app adresi hiçbir zaman tamamen kaldırılamaz — proje her zaman bir tanesine sahiptir. Bu adresin arama sonuçlarında asıl sitenizle yarışmaması için kanonik domain'e yönlendirin:
// proxy.ts (Next.js 16) veya middleware.ts
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
const CANONICAL_HOST = "example.com";
export default function middleware(request: NextRequest) {
const host = request.headers.get("host");
if (host && host.endsWith(".vercel.app")) {
const url = new URL(request.url);
url.host = CANONICAL_HOST;
url.protocol = "https";
return NextResponse.redirect(url, 308);
}
return NextResponse.next();
}308 kalıcı yönlendirmedir; arama motorlarına "asıl adres burası" der ve bağlantı değerini aktarır.
Middleware matcher'ına dikkat
Middleware kullanıyorsanız, hangi yolların ondan geçeceğini belirleyen matcher ifadesi sessiz hatalara yol açabilir. Uzantısı olmayan özel route'lar (/og, /icon gibi) yanlışlıkla yakalanıp yönlendirilebilir ve 404 verir:
export const config = {
matcher: ["/((?!api|og|icon|apple-icon|_next|_vercel|.*\\..*).*)"],
};Yeni bir özel route eklediğinizde (dinamik ikon, OG görseli, feed) bu listeyi güncellemeyi unutmayın. Belirti tipiktir: route tarayıcıda 404 verir ama dosya yerinde durmaktadır.
Ortam değişkenleri
Settings → Environment Variables bölümünden ekleyin. Üç ortam vardır: Production, Preview, Development.
İki noktaya dikkat:
NEXT_PUBLIC_ öneki. Bu önekli değişkenler istemci paketine gömülür ve herkes görebilir. Sadece gerçekten açık olması gereken değerlerde kullanın — API adresi, açık anahtar gibi. Gizli anahtarlar önek almadan tanımlanmalıdır.
Değişiklik sonrası yeniden dağıtım. Ortam değişkenini eklemek mevcut dağıtımı güncellemez; yeni bir build gerekir. Deployments sekmesinden "Redeploy" demeniz gerekir.
Cron gerekmeyen zamanlanmış içerik
Hobby planında cron job günde bir kez çalışabilir. Ama içerik yayınlamayı zamanlamak için buna gerek yoktur — ISR ile daha basit bir yol var.
İçeriği filtrelerken tarihi gelecekte olanları eleyin ve sayfaya yenileme süresi verin:
function isVisible(post: Post) {
const today = new Date().toISOString().slice(0, 10);
if (post.published === false) return false;
if (post.date > today) return false;
return true;
}export const revalidate = 3600;
export const dynamicParams = true;Sayfa saatlik yenilendiğinde new Date() yeni günü döner ve o güne ait içerik kendiliğinden görünür olur. Ne cron, ne otomatik commit, ne harici servis gerekir.
Bir yazıyı saatlik yenilemeyi beklemeden yayına almak istediğinizde ISR'ın on-demand tarafı devreye girer; Next.js'te ISR ve on-demand revalidation yazısında revalidatePath ile bunun nasıl yapıldığını anlattım.
E-posta gönderimi
Vercel'de SMTP sunucusu yoktur; sunucusuz fonksiyonlardan doğrudan e-posta gönderemezsiniz. Bir e-posta API servisi gerekir. Çoğu servis aylık birkaç bin e-postaya kadar ücretsiz katman sunar ve bu bir iletişim formu için fazlasıyla yeterlidir.
Kendi alan adınızdan gönderim yapmak için DNS'e doğrulama kayıtları eklemeniz gerekir (genelde DKIM, SPF ve DMARC). Bu kayıtlar olmadan da gönderim yapabilirsiniz ama e-postalar servis sağlayıcının genel adresinden gider ve spam'e düşme olasılığı yükselir.
Analitik
Vercel Web Analytics, Hobby planında aylık 50.000 olaya kadar ücretsizdir. Limit aşılırsa veri toplama durur — ekstra ücret çıkmaz. Toplama, ek sürenin de dolmasıyla duraklar ve 7 gün sonra yeniden başlar.
Kurulumu tek bileşendir:
import { Analytics } from "@vercel/analytics/react";
import { SpeedInsights } from "@vercel/speed-insights/next";
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics />
<SpeedInsights />
</body>
</html>
);
}Speed Insights, gerçek kullanıcılardan Core Web Vitals verisi toplar. Lighthouse'un lab skorundan farklı olarak bu veri Google'ın sıralamada kullandığı türdendir — asıl bakmanız gereken yer burasıdır. Ölçtüğünüz skoru yükseltmek ayrı bir iş; Core Web Vitals ve Lighthouse optimizasyonu yazısında adım adım ele aldım.
Not: Bu scriptler bazı reklam engelleyiciler tarafından bloklanır. Veri gerçek trafiğin bir kısmını göstermeyebilir; mutlak sayı yerine eğilime bakın.
Ücretsiz katmanın gerçek sınırları
"Ücretsiz plan bana yeter mi?" sorusunun cevabı sayılarda. Aşağıdakiler Vercel'in resmî limit belgesinden ve Hobby plan sayfasından alınmıştır (Eylül 2026 itibarıyla):
| Kalem | Hobby sınırı |
|---|---|
| Veri transferi (Fast Data Transfer) | Ayda 100 GB |
| Edge istek | Ayda 1.000.000'a kadar |
| Fonksiyon çağrısı | Ayda 1.000.000 |
| Active CPU | Ayda 4 CPU-saat |
| Provisioned Memory | Ayda 360 GB-saat |
| Fonksiyon azami süresi | 300 saniye (5 dakika) |
| Proje sayısı | 200 |
| Günlük dağıtım | 100 |
| Eşzamanlı build | 1 |
| Build süresi | Dağıtım başına 45 dakika |
| Proje başına domain | 50 |
| Cron | Proje başına 100 iş, günde en fazla bir çalıştırma |
| Runtime log saklama | 1 saat |
| Web Analytics | Ayda 50.000 olay |
| Görsel dönüştürme | Ayda 5.000 |
| Takım işbirliği özellikleri | Yok |
| Ticari kullanım | İzin verilmiyor |
İki not: 300 saniyelik fonksiyon tavanı güncel projeler içindir — Nisan 2025 öncesinde dağıtılmış ve Fluid compute kullanmayan eski projelerde varsayılan 10, azami 60 saniyedir. Ayrıca bu sayılar zamanla değişiyor; kritik bir karar veriyorsanız yukarıdaki bağlantılardan teyit edin.
Kişisel bir portföy veya blog bu sınırların çoğuna yaklaşmaz bile. Sıkışma ihtimali olan iki yer var: ağır görsel ya da video servis eden siteler aylık 100 GB transferi tüketebilir, uzun süren arka plan işleri de 300 saniyelik fonksiyon tavanına takılır. İkincisi için sunucusuz mimari zaten yanlış araçtır; Docker Compose ile Next.js + Django production kurulumu yazısında bu işleri kendi sunucunuzda çalıştırma yolunu anlatmıştım.
Ücretsiz planda kaç proje yayınlanabilir?
Hobby hesabında 200 projeye kadar yayınlayabilir, günde en fazla 100 dağıtım yapabilirsiniz. Kişisel kullanımda bu sayılar pratikte görünmez; asıl dikkat edilmesi gereken sınır teknik değil, ticari kullanım koşuludur.
Özel domain ücretsiz mi?
Domain'i Vercel'e bağlamak Hobby planında ücretsizdir ve proje başına 50 domain ekleyebilirsiniz. SSL de ücretsizdir: Vercel, projeye eklenen her domain için Let's Encrypt üzerinden sertifikayı otomatik üretmeye çalışır — domain nereden alınmış olursa olsun. Sertifika, DNS kayıtları eklenip yayıldıktan ve doğrulama başarılı olduktan sonra devreye girer.
Para ödediğiniz tek şey domain'in kendisidir; onu bir kayıt şirketinden satın alırsınız. Vercel'in bu ücrette payı yoktur.
Yayın öncesi kontrol listesi
- Domain bağlı ve SSL aktif mi?
www/ apex tercihi netleşti mi, biri diğerine yönleniyor mu?- Önizleme dağıtımları korumalı mı?
*.vercel.appkanonik domain'e yönlendiriliyor mu?- Ortam değişkenleri eklendikten sonra yeniden dağıtım yapıldı mı?
robots.txtvesitemap.xmldoğru içerik dönüyor mu?- Sitemap Google Search Console'a gönderildi mi?
Bunları geçtikten sonra sitenin altyapı tarafı hazırdır. Geri kalanı içerik meselesidir — ki asıl trafiği getiren de odur.