PHP siteleri için Core Web Vitals: LCP, INP ve CLS nasıl düzeltilir?
Core Web Vitals tarayıcıda ölçülür, ancak PHP sitesinde sonucun büyük bir kısmına sunucuda karar verilir. Bu kılavuz ilk önce nereye bakılacağını, hangi PHP, nginx ve ön uç değişikliklerinin sayıları değiştirdiğini ve kendinizi kandırmadan nasıl ölçüm yapacağınızı gösterir.
Kısaca
- Üç ölçüm: 2,5 saniyenin altındaki Largest Contentful Paint ( LCP), 200 ms'nin altındaki Interaction to Next Paint ( INP), 0,1'in altındaki Cumulative Layout Shift ( CLS), gerçek kullanıcıların 75. yüzdelik diliminde değerlendirilir.
- Sunucu yanıt süresiyle ( TTFB) başlayın: OPcache, ayarlanmış bir PHP-FPM havuzu, sayfa veya parça önbelleğe alma ve bir CDN genellikle PHP sitelerinde en büyük LCP kazancını sağlar.
- LCP öğesini bilinçli olarak düzeltin: kahraman görselini boyutlandırın, WebP servis yapın,
fetchpriority="high"değerini ayarlayın ve asla geç yüklemeyin. - Düzen değişikliklerini durdurmak için resimlere, reklamlara ve yerleştirmelere yer ayırın;
font-display: swapve önceden yüklenmiş yazı tipleri. - Önce saha verileriyle ( Search Console, CrUX) ölçüm yapın, ardından Lighthouse ve tarayıcının performans paneliyle çoğaltın.
PHP siteleri için Core Web Vitals yalnızca ön uçla ilgili bir konu değildir. Yavaş bir PHP sayfası, yalnızca HTML üretmek için bir saniye harcayabilir ve hiçbir görüntü optimizasyonu bunu telafi edemez. Aynı zamanda, 1,5 MB'lık bir kahraman resminin en büyük boyayı engellemesi durumunda çok hızlı bir sunucunun faydası olmaz. Kendi PHP sitelerimizde (integrono.com, nginx ve Cloudflare arkasında PHP-FPM çalıştırır) ve istemci projelerinde her iki tarafa da şu şekilde yaklaşıyoruz.
Core Web Vitals neyi ölçer?
- LCP ( Largest Contentful Paint): görünür en büyük öğe (genellikle bir kahraman görüntüsü veya bir başlık bloğu) oluşturulduğunda. İyi 2,5 saniye veya daha azdır.
- INP ( Interaction to Next Paint): Tüm ziyaret boyunca sayfanın tıklamalar, dokunmalar ve tuşlara basıldıktan sonra görsel olarak ne kadar hızlı yanıt verdiği. İyi 200 ms veya daha azdır.
- CLS ( Cumulative Layout Shift): yükleme sırasında içeriğin ne kadarının atladığı. İyi 0,1 veya daha azdır.
Google bunları, mobil ve masaüstü için ayrı ayrı, yüzde 75'lik dilimdeki gerçek Chrome kullanıcılarından elde edilen saha verileri üzerinden değerlendiriyor. Bu, yavaş bir şablonun veya yavaş bir ülkenin tüm grubu başarısızlığa uğratabileceği anlamına gelir. Lighthouse gibi laboratuvar araçları nihai puan için değil, hata ayıklama içindir.
Adım 1. Doğru şekilde ölçün
- Hangi URL gruplarının hangi ölçüme göre başarısız olduğunu görmek için Google Search Console Core Web Vitals raporunu açın.
- Başarısız olan her gruptan bir URL için PageSpeed Insights kontrol edin. En üstteki "alan verisi" bloğu önemli olandır; Aşağıdaki Lighthouse bloğu bunun nedenini açıklayan bir laboratuvar testidir.
- Tipik bir mobil deneyimi yeniden oluşturmak için Chrome DevTools'taki Performans panelini CPU 4x yavaşlama ve "Yavaş 4G" ile kullanın.
- Sürekli izleme için
web-vitalsJavaScript kitaplığıyla gerçek kullanıcı verilerini toplayın ve analizlerinize gönderin.
<script type="module">
import {onLCP, onINP, onCLS} from 'https://unpkg.com/web-vitals@4?module';
const send = (m) => navigator.sendBeacon('/vitals', JSON.stringify({
name: m.name, value: m.value, id: m.id, url: location.pathname
}));
onLCP(send); onINP(send); onCLS(send);
</script>
2. Adım. Önce sunucu yanıt süresini ( TTFB) düzeltin
LCP ilk bayt gelmeden önceki süreyi içerir. HTML'nizin oluşturulması 800 ms sürüyorsa, bütçenin üçte birini zaten harcamışsınız demektir. PHP sitelerinde olağan kaldıraçlar şunlardır:
- OPcache etkinleştirin ve tüm komut dosyalarını tutacak kadar büyük olduğundan emin olun. Bu olmadan PHP her istek üzerine dosyaları yeniden derler.
- PHP-FPM ayarlayın. Çok az sayıda çalışan istekleri sıraya koyuyor, çok fazla bellek tükeniyor. "Dinleme kuyruğu" ve "ulaşılan maksimum çocuk sayısı" için PHP-FPM durum sayfasını izleyin.
- Anonim ziyaretçiler için tüm sayfaları (nginx
fastcgi_cache, bir Laravel yanıt önbelleği veya Cloudflare önbellek kuralları) önbelleğe alın ve Redis ile parçaları veya sorgu sonuçlarını önbelleğe alın. - Yavaş sorguları düzeltin. Yavaş sorgu günlüğünü açın, N+1 kalıplarını arayın ve dizinler ekleyin. 120 sorgu çalıştıran bir sayfa, PHP sürümünden bağımsız olarak yavaştır.
- PHP'yi güncel tutun. Daha yeni PHP sürümleri daha hızlıdır ve daha az bellek kullanır.
# php.ini (production)
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 ; reload php-fpm on each deploy
# php-fpm pool
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500
pm.max_children değerini gerçek bellekten ayarlayın: PHP'ye verebileceğiniz belleği, çalışan sürecin ortalama boyutuna bölün (ps ile kontrol edin). validate_timestamps=0 ile her dağıtımdan sonra PHP-FPM yeniden yüklemeyi unutmayın, aksi takdirde eski kod bellekte kalır.
Web sunucusu düzeyinde HTTP/2 veya HTTP/3, Brotli veya gzip'i ve statik dosyalar için uzun ömürlü önbelleğe alma başlıklarını etkinleştirin:
location ~* \.(?:css|js|webp|avif|jpg|png|svg|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
Sürümlendirilmiş dosya adları veya dosyanın değiştirilme zamanına dayalı bir ?v= sorgusu kullanın, böylece "değişmez" hiçbir zaman eski varlıklar sunmaz.
3. Adım. LCP öğesini düzeltin
PageSpeed Insights veya DevTools Performans panelinde LCP öğesini bulun. Çoğu içerik sayfasında bu bir kahraman görselidir. Daha sonra:
- Tembel yükleme yapmayın. LCP görüntüsündeki
loading="lazy"bunu geciktirir. Bunun yerinefetchpriority="high"kullanın. - Doğru boyutta servis yapın. 900 piksellik bir yuva için 2400 piksellik bir görüntü bayt israfına neden olur.
srcsetvesizeskullanın. - WebP veya AVIF kullanın. Tipik tasarruf, benzer kalitede JPEG'e göre yüzde 30 ila 60 arasındadır.
- Zincirlerden kaçının. CSS arka planı aracılığıyla ayarlanan veya JavaScript tarafından enjekte edilen bir görüntü geç keşfedilir. Bunu HTML'ye
<img>olarak koyun. - LCP bağlı olduğu ön bağlantı veya kendi kendine barındırılan üçüncü taraf kaynaklar (yazı tipleri, görüntü CDN'si).
<img src="/images/hero-1200.webp"
srcset="/images/hero-640.webp 640w, /images/hero-1200.webp 1200w"
sizes="(max-width: 1040px) 92vw, 960px"
width="1200" height="630"
alt="Descriptive alt text"
decoding="async" fetchpriority="high">
Makalenin bu blog kullanımında kapsadığı kalıp budur: iki WebP boyutu, belirgin boyutlar ve kahraman için yüksek getirme önceliği.
4. Adım. Düzen vardiyalarını kaldırın ( CLS)
- Tarayıcının alanı ayırması için resimlerde, videolarda ve iframe'lerde her zaman
widthveheight(veya CSS'deaspect-ratio) ayarlayın. - Banner'lar, çerez bildirimleri ve reklamlar için yer ayırın. Yüklendikten sonra içeriği aşağı itmek yerine bunları sabit minimum yüksekliğe sahip bir kaba yerleştirin.
- Yazı tipleri:
font-display: swapveyaoptionalkullanın, ana yazı tipi dosyasını önceden yükleyin ve alt kümesine koyun. Benzer ölçümlere sahip bir yedek yazı tipi seçin. - Kullanıcı tetiklemediği sürece mevcut içeriğin üzerine içerik enjekte etmeyin.
- Düzeni değiştiren özelliklerle (
top,height) değil ,transformveopacityile canlandırın.
Adım 5. INP geliştirin: ana başlıkta daha az JavaScript
INP en yeni ölçümdür ve sunucu bunu doğrudan etkilemediğinden PHP geliştiricilerinin ihmal ettiği bir ölçümdür. Bunun nedenleri tarayıcıdadır: büyük paketlerden gelen uzun görevler, ağır üçüncü taraf komut dosyaları (analiz, sohbet widget'ları, etiket yöneticileri) ve eşzamanlı olarak çok fazla iş yapan işleyiciler.
- Üçüncü taraf komut dosyalarını denetleyin. Kimsenin kullanmadığını kaldırın, geri kalanını
deferveya ilk etkileşimden sonra yükleyin. - Uzun görevleri bölün.
requestIdleCallback,setTimeoutveya Scheduler API ile işi parçalara ayırın; ağır hesaplamaları bir Web Worker taşıyın. - DOM'u küçük tutun. Binlerce düğüm her güncellemeyi yavaşlatır.
- Döngülerdeki zorunlu eşzamanlı düzenlerden kaçının (düzen özelliklerini dönüşümlü olarak okuyup yazmak).
- Yavaş çalışmaya başlamadan önce anında geri bildirim (basılmış durum veya döndürücü) gösterin.
6. Adım. Dağıtım sürecinizde onu koruyun
Performans yavaş yavaş geriliyor: yeni bir etiket, daha ağır bir kahraman, ana sayfada ekstra bir sorgu. En önemli beş şablonunuz için Lighthouse CI veya planlı bir PageSpeed API kontrolü ekleyin, bütçeleri ( LCP, toplam JS boyutu, görüntü ağırlığı) belirleyin ve bunlar aşıldığında uyarı verin. Her sürümden önce ve sonra TTFB karşılaştırın; atlarsa bunun nedeni neredeyse her zaman bir sorgu veya artık isabet etmeyen bir önbellektir.
Gerçekçi bir iş düzeni
- Alan verilerini ölçün ve arızalı URL gruplarını belirleyin.
- OPcache etkinleştirin, PHP-FPM ayarlarını gözden geçirin, anonim trafik için tam sayfa önbelleğe alma ekleyin.
- Kahraman görsellerini düzeltin: format, boyut, öncelik, boyutlar.
- Geç yüklenen her şey için yer ayırın.
- JavaScript'i azaltın ve erteleyin; kullanılmayan üçüncü tarafları kaldırın.
- Saha verileri değişen bir pencere olduğundan 28 gün sonra yeniden ölçün.
İyileştirmelerin Search Console kademeli olarak görünmesini bekleyebilirsiniz: Rapor yaklaşık olarak son 28 güne ait verileri kullanır, dolayısıyla bugün gönderilen bir düzeltme yalnızca yaklaşık bir ay sonra tamamen görünür hale gelir.
Nasıl yardımcı olabiliriz?
Teknik SEO katılımının bir parçası olarak ve tek seferlik ayarlama olarak PHP ve Laravel projelerinde performans çalışmaları yapıyoruz: önbelleğe alma, sorgular, resimler ve kodla gönderilen ön uç düzeltmeleri. Yukarıdaki değişikliklerden hangisinin sitenizde işe yarayacağını bilmek istiyorsanız, danışmanlık veya sunucu analizi randevusu alın. Tarama ve dizine eklemeyle ilgili daha geniş kontrol listesi için teknik SEO denetim kontrol listemizi okuyun.
Sık sorulan sorular
İyi Core Web Vitals puanları nedir?
2,5 saniye veya daha az LCP, 200 milisaniye veya daha az INP ve 0,1 veya daha az CLS, tümü gerçek kullanıcı ziyaretlerinin 75. yüzdelik diliminde ölçülmüştür.
Core Web Vitals Google sıralamalarını etkiler mi?
Bunlar, Google'ın sayfa deneyimi sinyallerinin bir parçasıdır ve orta derecede ağırlığa sahip bir sıralama faktörüdür. Alaka düzeyi ve içerik daha önemlidir, ancak yavaş veya dengesiz bir sayfa da daha kötü dönüşümlere neden olur ve bu da genellikle daha büyük işletme maliyetine neden olur.
PHP Core Web Vitals nasıl etkiler?
Çoğunlukla LCP besleyen sunucu yanıt süresi ( TTFB) aracılığıyla. OPcache, ayarlanmış PHP-FPM, önbellekleme, hızlı sorgular ve güncel PHP sürümü bunu azaltır. PHP doğrudan INP veya CLS sorunlarına neden olmaz; bunlar ön uç kod ve düzenden kaynaklanır.
PageSpeed Insights neden Search Console farklı sayılar gösteriyor?
PageSpeed Insights tek URL laboratuvar testini ve mümkün olduğunda saha verilerini gösterirken Search Console yaklaşık 28 gün boyunca URL türüne göre gruplandırılmış alan verilerini raporlar. Başarıyı saha verilerine göre değerlendirin.
İyileştirmelerin Search Console görünmesi ne kadar sürer?
Core Web Vitals raporu, gerçek kullanıcı verilerini içeren 28 günlük bir aralık kullanır; bu nedenle, tam etkiyi görmek için düzeltme gönderildikten sonra yaklaşık dört hafta bekleyin.
Ücretsiz keşif görüşmesi
Dağınık bir yığın veya takılmış bir entegrasyon getirin - Integrono en akıllı ilk adımı haritalar.
Bütçe tuzakları, bağımlılıklar ve satın al / yapıştır / inşa kararında kıdemli bir bakış alırsınız - ücretli iş başlamadan. CEO döngüde kalır.