İçeriğe atla
Abdullah Üstün

9 Mayıs 2026 · 9 dk okuma · Teknik SEO

Core Web Vitals 2026 — INP Odaklı Performans Rehberi

Google Core Web Vitals: LCP, INP (eski FID), CLS. INP nasıl ölçülür, hangi değer ideal, JavaScript ağırlığı nasıl azaltılır, INP düşük tutmanın 7 pratik tekniği.

Core Web Vitals 2024 Mart’ında değişti: FID (First Input Delay) emekli oldu, INP (Interaction to Next Paint) geldi. 2026’da artık INP en kritik metric — kullanıcının her etkileşimini ölçüyor, sadece ilkini değil.

INP düşük olmayan sitelerin sıralaması düşüyor, mobile traffic’i kaybediyor. 12 yıllık SEO + 4 yıl modern web stack tecrübesinden 2026 güncel rehber.

Hızlı özet: Core Web Vitals 2026: LCP <2.5s, INP <200ms (FID’in yerini aldı 2024’te), CLS <0.1. INP en kritik ve en zor — JavaScript ağırlığını azaltmak (code splitting, lazy load, framework choice), main thread blocking’i çözmek, interaction handler’ları optimize etmek INP’yi düşürür.

Core Web Vitals 2026 — Üç Metric

1. LCP (Largest Contentful Paint)

Sayfanın en büyük görsel öğesi (hero image, başlık) ne zaman görünür?

DeğerSınıflandırma
< 2.5sİyi
2.5-4.0sOrta
> 4.0sKötü

LCP’yi düşürmek:

  • Hero görseli optimize (WebP/AVIF, doğru boyut)
  • <link rel="preload"> ile öncelik
  • Server response time (TTFB) düşük
  • CDN kullan (Cloudflare)
  • Critical CSS inline

2. INP (Interaction to Next Paint) ⭐ EN KRİTİK

Kullanıcının her tıklaması, key press’i, tap’i ne kadar sürede ekrana yansır?

DeğerSınıflandırma
< 200msİyi
200-500msOrta
> 500msKötü

INP, FID’den neden zor?

  • FID sadece ilk etkileşimi ölçüyordu
  • INP tüm etkileşimleri ölçüyor + 75. yüzdelik dilim (en yavaş %25)
  • Yani 1 tane yavaş tıklama tüm INP’i bozar

3. CLS (Cumulative Layout Shift)

Sayfa yüklenirken içerik kayıyor mu? (image yüklenince yazı aşağı kayıyor gibi)

DeğerSınıflandırma
< 0.1İyi
0.1-0.25Orta
> 0.25Kötü

CLS’i düşürmek:

  • Image’larda width + height attribute (browser yer ayırsın)
  • Reklam yerleri için min-height
  • Web font preload (FOIT/FOUT’u azalt)
  • CSS animation’ı transform ile (layout etkisiz)

INP Niye Bu Kadar Zor?

INP JavaScript ağırlığına çok duyarlı. 2018-2022 SPA modası (React, Vue) JS bundle’larını şişirdi. Bir sayfa 500KB+ JS yüklüyorsa:

  1. Ana thread tıkanıyor (parsing, execution)
  2. Kullanıcı tıklıyor → handler çalışmadan ekran donuyor
  3. INP 500ms+ — fail

Çözümler 4 kategoride:

Çözüm 1: Doğru Framework Seçimi

FrameworkINP PerformansıNe için iyi
Vanilla HTML/CSS⭐⭐⭐⭐⭐Statik içerik, basit site
Astro Islands⭐⭐⭐⭐⭐Marketing site, blog, ürün katalogu
Hugo / Jekyll⭐⭐⭐⭐⭐Statik sites
Next.js (App Router + RSC)⭐⭐⭐⭐Hibrit (statik + dinamik)
SvelteKit⭐⭐⭐⭐Modern, hafif framework
Remix⭐⭐⭐⭐Form-heavy app
Vue 3 SPA⭐⭐⭐Single-page app
React SPA (CRA)⭐⭐Legacy app
WordPress + Elementor⭐⭐Eklenti şişkinliği
WordPress + WoodmartE-ticaret eklenti yığını

Astro Islands marketing site için 2026’da en iyi seçim. Default JS = 0 KB. Sadece interaktif olması gereken component’ler hidrate olur.

Çözüm 2: JavaScript Optimization

Code Splitting

// ❌ Kötü — her şey bir bundle
import HeavyChart from './HeavyChart';
import VideoPlayer from './VideoPlayer';
import RichTextEditor from './RichTextEditor';

// ✅ İyi — dynamic import
const HeavyChart = dynamic(() => import('./HeavyChart'));
const VideoPlayer = dynamic(() => import('./VideoPlayer'));

Tree Shaking

Webpack/Vite otomatik yapıyor ama dikkat:

// ❌ Tüm lodash bundle'a girer (~70KB)
import _ from 'lodash';

// ✅ Sadece debounce import (~2KB)
import { debounce } from 'lodash-es';

Bundle Size Audit

# Vite/Astro için
pnpm build
# bundle size raporu yazıyor

# Detaylı analiz için
pnpm add -D rollup-plugin-visualizer

200KB+ gzipped JS varsa kırmızı bayrak.

Çözüm 3: Third-Party Script’leri Lazy Load

Tipik suçlular:

  • Chat widget (Tawk.to, Intercom): ~100-200 KB
  • Analytics (GTM yüklüyor olabilir 50+ tag): değişken
  • Sosyal share butonları
  • Reklam network’ları (Google AdSense, Meta Pixel)
  • Heatmap (Hotjar, Microsoft Clarity)

Lazy load tekniği:

// Sayfa interactive olduktan sonra inject
window.addEventListener('load', () => {
  setTimeout(() => {
    const script = document.createElement('script');
    script.src = 'https://embed.tawk.to/...';
    script.async = true;
    document.body.appendChild(script);
  }, 3000); // 3 saniye sonra
});

Veya <script defer> ve <script async> kullan, ama <head>’de synchronous third-party’den kaçın.

Partytown

Third-party script’leri web worker’da çalıştırır — main thread’i bloklamaz:

pnpm add @builder.io/partytown
<!-- Partytown ile -->
<script type="text/partytown" src="https://www.googletagmanager.com/gtm.js?id=GTM-XXX"></script>

INP %30-50 düşürebiliyor.

Çözüm 4: Event Handler Optimization

Debounce / Throttle

// ❌ Her keystroke'ta arama (her seferinde event'i tetikliyor)
input.addEventListener('input', search);

// ✅ 300ms beklet, sonra ara
const debouncedSearch = debounce(search, 300);
input.addEventListener('input', debouncedSearch);

requestIdleCallback

Ağır iş varsa idle time’ı kullan:

function processBigData() {
  // ... uzun süren iş
}

// ❌ Anında çalışır, INP'yi bozar
processBigData();

// ✅ Browser idle olduğunda çalışır
requestIdleCallback(() => {
  processBigData();
});

Long Task Breaking

// ❌ Tek long task (500ms+)
function processItems(items) {
  items.forEach(item => heavyWork(item));
}

// ✅ Yield to main thread
async function processItems(items) {
  for (const item of items) {
    heavyWork(item);
    await new Promise(r => setTimeout(r, 0)); // microtask yield
  }
}

INP Ölçüm Araçları

1. Chrome DevTools — Performance Tab

  1. F12 → Performance
  2. Record → sayfayı kullan (tıklama, scroll)
  3. Stop → “Interactions” track’inde INP değerleri

2. Web Vitals Chrome Extension

https://chrome.google.com/webstore — gerçek zamanlı CWV gösterir.

3. PageSpeed Insights (CrUX data)

https://pagespeed.web.dev/ Gerçek kullanıcı verisi (Chrome User Experience Report). 28 gün ortalaması.

4. Search Console — Core Web Vitals Report

URL’lerin tarihsel CWV durumu. Mobile + Desktop ayrı.

5. Real User Monitoring (RUM)

  • Cloudflare Web Analytics (ücretsiz)
  • Google Analytics 4 (web vitals plugin)
  • SpeedCurve (premium)
  • DebugBear (premium)

INP Iyileştirme Vaka Çalışması (Hipotetik)

AşamaLCPINPCLSLighthouse
Başlangıç (WordPress + Elementor)4.2s580ms0.1835
Astro’ya migration1.8s220ms0.0588
+ Third-party lazy load1.5s140ms0.0495
+ Image optimization (WebP)1.1s130ms0.0498

INP 580 → 130ms (%77 iyileşme). LCP 4.2s → 1.1s (%74 iyileşme). Lighthouse 35 → 98.

Tipik WP→Astro migration sonucu.

INP Hedefleri Sektörel

SektörHedef INP
Marketing/blog< 100ms
E-ticaret (form/sepet)< 200ms
SaaS dashboard< 300ms (zorunlu olarak yüksek interaktivite)
Video/medya< 250ms
Doktor/avukat sitesi< 150ms
Restoran/cafe< 100ms

Modern Stack ile Migration

WordPress’ten Astro/Next.js’e geçiş Core Web Vitals’da en hızlı kazanç. Tipik:

  • LCP: 3-5x iyileşme
  • INP: 3-5x iyileşme
  • CLS: 2-3x iyileşme
  • Lighthouse: +50 puan

Web Tasarım hizmetimiz Lighthouse 95+ garanti.

Yapılacaklar Checklist

  • PageSpeed Insights ile mevcut CWV ölç
  • Search Console — Core Web Vitals raporuna bak
  • Bundle size audit (Vite analyzer veya Webpack Bundle Analyzer)
  • Third-party script’leri lazy load
  • Partytown ile GTM’i web worker’a taşı
  • Image’ları WebP/AVIF’a dönüştür
  • Image’larda width/height attribute
  • Font preload + display swap
  • Event handler’ları debounce/throttle
  • 1 ay sonra tekrar ölç (28 günlük CrUX cycle)

Performans Audit Hizmeti

Kapsamlı CWV audit + iyileştirme planı için GEO/AI Search Audit kapsamında performans bölümü var (5 gün, 7.500 TL).

Veya WP migration ile birlikte modern stack için Web Tasarım hizmetimiz veya sektörel paketler.

Ücretsiz strateji görüşmesi → sitenizin CWV durumuna bakıp öneri yapalım.


İlgili yazılar:

Sıkça Sorulanlar

INP, FID'den niye farklı? +
FID (First Input Delay) sadece ilk etkileşimi ölçüyordu. INP (Interaction to Next Paint) tüm etkileşimleri (tıklama, key press, tap) ve 75. yüzdelik dilimi (yani en yavaş %25'i) ölçüyor. Daha gerçekçi user experience metric. 2024 Mart'ında resmi Core Web Vital oldu.
INP iyi/orta/kötü değerleri ne? +
Google sınıflandırması: <200ms iyi (Good), 200-500ms orta (Needs Improvement), >500ms kötü (Poor). 200ms hedef minimum. 100ms altı mükemmel. Mobile'da masaüstüne göre genelde 1.5-2x daha yüksek INP — mobile-first optimize.
JavaScript ağırlığını nasıl ölçeceğim? +
Lighthouse veya PageSpeed Insights → 'Total Blocking Time' metric'i + 'Reduce JavaScript execution time' önerileri. Aynı zamanda Network tab'da JS bundle size kontrol edilebilir. 200KB+ gzipped JS = INP riski.
React/Vue/Astro Islands hangi seçim INP için en iyi? +
Astro Islands en iyi (default JS yok, sadece gerekli component hidrate olur). Next.js RSC + Server Components ortalaması — server'da render edip client'a sınırlı JS gönderir. Klasik React SPA en kötü (tüm JS bundle). 2026'da büyük site için Astro veya Next.js (App Router) tercih.
INP düşürmek için en hızlı kazanç ne? +
İki şey: (1) Third-party script'leri lazy load et (chat widget, social share, analytics — sayfa yüklendikten sonra inject), (2) Heavy event handler'ları debounce/throttle et veya requestIdleCallback ile defer et. Bu iki teknik tipik INP'yi 400ms'den 150ms'e indirir.

Bu konu hakkında konuşalım mı?

30 dakikalık ücretsiz görüşmeyle ihtiyacınızı netleştirelim.

Form gönderdiğinizde KVKK kapsamında size dönüş yapabilmemiz için iletişim bilgilerinizi kullanmamıza izin vermiş olursunuz.

Core Web Vitals 2026'da: LCP (Largest Contentful Paint <2.5s), INP (Interaction to Next Paint <200ms, FID'in yerini aldı 2024'te), CLS (Cumulative Layout Shift <0.1). INP en kritik ve en zor metrik — kullanıcı tıklama, scroll, key press'lerin yanıt süresi. JavaScript ağırlığını azaltmak (code splitting, lazy load, framework choice), main thread blocking'i çözmek, interaction handler'ları optimize etmek INP'yi düşürür.