Google Core Web Vitals, 2021'den beri arama sıralamasında kritik bir faktör. 2025'te bu metrikler daha da önemli hale geldi. Bu rehberde, Core Web Vitals'ı optimize ederek SEO performansınızı nasıl artıracağınızı öğreneceksiniz.
Core Web Vitals Nedir?
Google'ın kullanıcı deneyimini ölçmek için belirlediği üç temel metrik:
1. Largest Contentful Paint (LCP)
Tanım: Sayfanın ana içeriğinin yüklenmesi için geçen süre
Hedefler:
İstatistikler:
2. First Input Delay (FID) / Interaction to Next Paint (INP)
Tanım: Kullanıcı etkileşimine verilen yanıt süresi
Not: 2024'ten itibaren FID yerine INP kullanılıyor
INP Hedefleri:
Kullanıcı Etkisi:
3. Cumulative Layout Shift (CLS)
Tanım: Sayfa yüklenirken beklenmeyen layout kaymaları
Hedefler:
Kullanıcı Deneyimi:
LCP Optimizasyonu
1. Server Response Time (TTFB) İyileştirme
Target: <800ms
Stratejiler:
`typescript
// Next.js ile Server-Side Caching
import { unstable_cache } from 'next/cache';
const getCachedData = unstable_cache(
async (id: string) => {
return await db.getData(id);
},
['data-cache'],
{ revalidate: 3600 } // 1 hour cache
);
`
CDN Kullanımı:
Database Optimization:
2. Resource Loading Optimization
Critical CSS:
`html
/ Above-the-fold styles /
.hero { ... }
.navigation { ... }
`
Image Optimization:
`tsx
import Image from 'next/image';
export default function Hero() {
return (
{/ Priority loading for LCP image /}
src="/hero.jpg" alt="Hero Image" width={1920} height={1080} priority // This is crucial for LCP! quality={85} placeholder="blur" blurDataURL="data:image/jpeg;base64,..." />
);
}
`
3. Font Loading Optimization
Modern Font Loading:
`css
/ font-display: swap prevents invisible text /
@font-face {
font-family: 'Geist';
src: url('/fonts/geist.woff2') format('woff2');
font-display: swap;
font-weight: 400;
}
`
Next.js Font Optimization:
`tsx
import { Inter } from 'next/font/google';
const inter = Inter({
subsets: ['latin'],
display: 'swap',
preload: true,
variable: '--font-inter',
});
export default function Layout({ children }) {
return (
{children});
}
`
INP/FID Optimizasyonu
1. JavaScript Bundle Reduction
Code Splitting:
`tsx
import dynamic from 'next/dynamic';
// Lazy load heavy components
const HeavyChart = dynamic(() => import('./HeavyChart'), {
ssr: false,
loading: () =>
});
// Route-based code splitting (automatic in Next.js)
export default function Page() {
return
}
`
Bundle Analysis:
`bash
# Install bundle analyzer
npm install @next/bundle-analyzer
# Analyze bundle
ANALYZE=true npm run build
`
Results:
2. Long Tasks Optimization
Web Workers for Heavy Computation:
`typescript
// worker.ts
self.addEventListener('message', (e) => {
const result = heavyComputation(e.data);
self.postMessage(result);
});
// main.ts
const worker = new Worker(new URL('./worker.ts', import.meta.url));
worker.postMessage(data);
worker.addEventListener('message', (e) => {
console.log('Result:', e.data);
});
`
Task Scheduling:
`typescript
// Use requestIdleCallback for non-critical tasks
function scheduleNonCriticalWork(callback: () => void) {
if ('requestIdleCallback' in window) {
requestIdleCallback(callback);
} else {
setTimeout(callback, 1);
}
}
scheduleNonCriticalWork(() => {
// Analytics, logging, etc.
trackPageView();
});
`
3. Third-Party Scripts Optimization
Script Loading Strategy:
`tsx
import Script from 'next/script';
export default function Layout() {
return (
<>
{/ Critical scripts - load immediately /}
{/ Non-critical scripts - load after interactive /}
{/ Low priority scripts - lazy load /}
>
);
}
`
CLS Optimizasyonu
1. Reserved Space for Dynamic Content
Images with Dimensions:
`tsx
// ❌ Bad - causes layout shift

// ✅ Good - reserves space
src="/image.jpg"
alt="Product"
width="800"
height="600"
style={{ aspectRatio: '4/3' }}
/>
// ✅ Best - Next.js Image
src="/image.jpg" alt="Product" width={800} height={600} /> Skeleton Screens: import { Suspense } from 'react'; function ProductSkeleton() { return (``tsx
);
}
export default function Page() {
return (
);
}
`
2. Font Loading Impact
Prevent FOIT (Flash of Invisible Text):
`css
@font-face {
font-family: 'CustomFont';
src: url('/fonts/custom.woff2') format('woff2');
font-display: optional; / Prevents layout shift /
}
`
3. Animations and Transitions
Use Transform instead of Layout Properties:
`css
/ ❌ Bad - triggers layout /
.element {
transition: height 0.3s;
}
/ ✅ Good - GPU accelerated /
.element {
transition: transform 0.3s;
will-change: transform;
}
/ Animate with translate /
.slide-in {
transform: translateY(0);
}
.slide-out {
transform: translateY(100%);
}
`
Monitoring ve Testing
1. Core Web Vitals Measurement
Real User Monitoring (RUM):
`typescript
// web-vitals library
import { onCLS, onFID, onLCP } from 'web-vitals';
function sendToAnalytics(metric: any) {
const body = JSON.stringify(metric);
const url = '/api/analytics';
if (navigator.sendBeacon) {
navigator.sendBeacon(url, body);
} else {
fetch(url, { body, method: 'POST', keepalive: true });
}
}
onCLS(sendToAnalytics);
onFID(sendToAnalytics);
onLCP(sendToAnalytics);
`
2. Performance Testing Tools
Automated Testing:
CI/CD Integration:
`yaml
# .github/workflows/performance.yml
name: Performance
on: [pull_request]
jobs:
lighthouse:
runs-on: ubuntu-latest
steps:
with:
urls: |
https://example.com
budgetPath: ./budget.json
`
SEO Impact
Ranking Factors
Google Data:
Business Impact:
Search Console Integration
Monitoring:
1. Google Search Console → Core Web Vitals report
2. Identify URLs with issues
3. Fix and request reindexing
4. Monitor improvements
Timeline:
Enextware Performance Garantisi
Tüm web sitelerimizde Core Web Vitals garantisi:
Hedeflerimiz:
Sonuçlar:
Ücretsiz Performance Audit
Web siteniz için ücretsiz Core Web Vitals analizi:
İletişim:
📞 +90 536 628 0007
📧 info@enextware.com
🌐 https://enextware.com.tr
