Pagespeed plan
Skill tasdeleno/pagespeed-plan
pagespeed.web.dev / Google PageSpeed Insights (Lighthouse) ile bir web sitesini otomatik test eder ve PSI'nin gosterdigi TUM bulgulara (firsatlar, tanilar, insights, teknolojiye ozel oneriler) gore onceliklendirilmis, uygulanabilir bir iyilestirme plani (Markdown) uretir. Su durumlarda kullan: "sayfa hizi testi", "PageSpeed testi", "site hiz denetimi", "performans/SEO/erisilebilirlik denetimi", "Core Web Vitals", "Lighthouse skoru", "hiz optimizasyonu plani", "pagespeed skorlarina gore plan hazirla". Hem Cowork'te hem Claude Code CLI'da calisir. Ciktiyi bir .md dosyasina yazar ve sohbette ozetini gosterir. SEO/teknik/erisilebilirlik derinligi YERLESIKTIR (references/); claude-seo gerekmez, kuruluysa opsiyonel ekstra derinlik icin devredilir.From its SKILL.md
npx -y skills add tasdeleno/pagespeed-planAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
15.8 KB, ~5.7k tokens by cl100k_base, as published. Nobody here has run it
PageSpeed Insights Denetim + Plan
Bir URL'yi Google PageSpeed Insights API'siyle (Lighthouse motoru) test eder ve
PSI sayfasinda gorunen her seyi (firsatlar + tanilar + yeni "Insights" denetimleri +
teknolojiye ozel oneriler) onceliklendirilmis bir eylem planina cevirir.
SEO / teknik / erisilebilirlik derinligi yerlesiktir (references/ dosyalari); claude-seo
kurulu OLMASA da plan tam yazilir. claude-seo kuruluysa opsiyonel ekstra derinlik icin devredilir.
Ne zaman kullanilir
Kullanici bir sitenin/URL'nin hizini, Core Web Vitals'ini, SEO/erisilebilirlik/best-practices durumunu olcmek ve ne yapilmasi gerektigine dair plan istediginde.
Gereksinimler
- Python 3 (yalnizca standart kutuphane;
pip installgerekmez). - Internet erisimi (googleapis.com'a).
claude-seoGEREKMEZ. SEO/teknik/erisilebilirlik derinligireferences/altinda yerlesiktir. claude-seo kuruluysa opsiyonel devir yapilir; degilse plan yine tam yazilir.- Opsiyonel
PSI_API_KEYortam degiskeni. Anahtarsiz da calisir ama Google dusuk hiz limiti uygular; medyan-of-3 birden fazla istek attigi icin anahtar onerilir. Ucretsiz anahtar: Google Cloud Console > "PageSpeed Insights API"'yi etkinlestir > Credentials > API key.
Adimlar
- Kullanicidan URL'yi al. Strateji belirtmediyse
--strategy both(mobil + masaustu); mobil skor genelde onceliklidir. - Bu SKILL.md ile ayni dizindeki betigi calistir (varsayilan 3 kosu, medyan alinir):
Anahtar varsa:python3 scripts/psi_audit.py <URL> --strategy both --runs 3 --locale tr --out psi_veri.jsonPSI_API_KEY=... python3 scripts/psi_audit.py <URL> ...Hiz limiti/kota (429) olursa:--runs 1,PSI_API_KEYekle, ya da PSI'siz teshise gec (bkz. "Derin teshis" #5).both+--runs 3= 6 istek; anahtarsiz gunluk limit dusuktur. - Betik STDOUT'a (ve
--outile dosyaya) tam kapsamli bir ozet JSON basar:results.<strateji>.categories: kategori skorlari (0-100) +runs(kosu basina ham skor).labMetrics: FCP, LCP, TBT, CLS, SpeedIndex, TTI (medyan).fieldData+fieldOverall: gercek kullanici (CrUX) verisi (varsa).labVsFieldGaps: lab ile saha celiskileri.counts: kategori basina toplam / duzeltilecek / gecti sayilari.auditsByCategory: her kategoride PSI'de gorunen TUM denetimler — firsatlar, tanilar (cache politikasi, byte agirligi, DOM vb.) ve yeni insights (or. resim teslimi). Her denetimde:passed,score,group/groupTitle,display,savingsMs,savingsBytes,weight,description(duzeltme rehberi/ONERI) vepassed=falseisedetails: PSI sayfasindaki SOMUT KANIT — hangi element (selector/snippet), hangi deger (kontrast orani, tap-target boyutu, alt'sizgorsel vb.) ve hedef. Kontrast/buton boyutu/alt gibi bulgulari somutlastirir. Cok kalemliysedetails.truncatedkalan sayisini verir.opportunities: kazanci (savingsMs) olan denetimler, kazanca gore sirali (oncelik icin).thirdParties: en cok engelleyen ucuncu taraf servisler.resourceSummary: kaynak turune gore istek + boyut.largestResources: en agir tekil kaynaklar (transferSize'a gore). Tur-toplaminin gizledigi sisman tek dosyayi (cogu zaman logo/header ikonu) yuzeye cikarir — bunu daima gozden gecir.stackPacks: teknolojiye ozel oneriler (WordPress, WooCommerce, React vb.).screenshots(yalniz--screenshotsile): kaydedilen ekran goruntusu/filmstrip dosya yollari.geo(yalniz--geoile): robots.txt AI-crawler kurallari +llms.txtvar/yok.- Cok-URL modu (birden cok URL veya
--sitemap): tum cikti{"pages": {url: <ustteki bicim>}}sarilir. warnings/errors: kismi/tam basarisizlik nedeni.
- SEO / teknik / erisilebilirlik derinligi icin
references/dosyalarini kullan (asagidaki bolum). claude-seo kuruluysa opsiyonel olarak ek derinlik icin cagir. - Iki kaynagi birlestirip asagidaki formatta tek bir plan yaz.
.mddosyasina kaydet (or.<alanadi>-pagespeed-plani.md) ve sohbette kisa ozet goster.
TAMLIK KURALI (onemli)
Plan, PSI'de gorunen hicbir bulguyu atlamamali:
auditsByCategory'deki passed=false olan HER denetim plana girsin — grup grup (or. "Firsatlar", "Tanilar", "Insights") baslikla;counts.duzeltilecekile sayisi tutmali.- Her maddede denetimin adi +
displaydegeri + varsasavingsMs+description'dan cikan somut ONERI (ne yapilacak) yer alsin. Oneri olmadan bulgu yazma — bulgu + duzeltme birlikte. detailsvarsa SOMUT KANITI yaz: hangi element + mevcut deger → hedef. Ornek: kontrast ".btn-x2.1:1 → 4.5:1"; dokunma hedefi "a.nav24×24 → 48×48"; alt "img.logoalt eksik". Genel oneri + o sayfaya ozel kanit birlikte olmali (korlemesine "kontrasti duzelt" yetmez).stackPacks'teki teknolojiye ozel onerileri ilgili denetimin altina entegre et (or. cache icin "WordPress'te su onbellek eklentisi").- Gecmis (passed=true) denetimler istege bagli "Gecen denetimler" altinda kisaca ozetlenebilir.
- Kullanici "ozet" isterse ilk 5-10 onceligi one cikar ama tam listeyi de plana ekle.
SEO / Teknik / Erisilebilirlik derinligi (yerlesik)
Bu derinlik references/ altinda yerlesiktir; claude-seo olmadan da tam plan yazilir:
- PSI'deki
auditsByCategory.seo+accessibility+best-practicesbulgularini (her birinindescriptiononerisi vedetailskaniti ile) topla. - Su yerlesik referanslarla derinlestir:
references/teknik-seo-derin.md— SEO/teknik denetimler (crawlability, indexability, guvenlik, URL, mobil/dokunma hedefi, JS render) + PSI audit id eslemesi.references/core-web-vitals-derin.md— LCP alt-parcalari, INP/CLS kirilimi, esikler, saha-lab.references/seo-performans-ajan.md— performans teshis yontemi + darbogaz katalogu.references/schema-ve-erisilebilirlik.md— JSON-LD sablonlari + WCAG/a11y denetim eslemesi (kontrast/tap-target/alt icin somut yazim tablosu).
- Ciktiyi planin "SEO / Projeye Ozel Aksiyonlar" ve "Erisilebilirlik & En Iyi Uygulamalar" bolumlerine entegre et (cakisanlari tekille).
- Opsiyonel:
claude-seoKURULUYSA, URL + bu bulgulari baglam vererek calistir ve ciktisini ustteki derinlige EK olarak entegre et. Kurulu degilse bu adim atlanir (uyari/eksik notu YOK — yerlesik referanslar zaten yeterli).
Ek modlar (CI, coklu sayfa, diff, HTML rapor, GEO)
Ayni psi_audit.py + iki kucuk yardimci betik; hepsi stdlib (pip yok), PSI JSON'una karsi calisir.
- Coklu sayfa / sitemap:
psi_audit.py <url1> <url2> ...ya da--sitemap <sitemap.xml> --max-pages N(varsayilan 10). Ciktipagesaltinda toplanir; kota icin coklu modda--runsvarsayilani 1. - robots.txt -> sitemap otomatik kesif:
--from-robots <site-url>→ sitenin/robots.txt'indekiSitemap:satirlarini bulur, yoksa/sitemap.xml'e duser; bulunan sayfalari--max-pagesile tarar. - Ekran goruntusu / filmstrip:
--screenshots <klasor>→ Lighthouse'un final + filmstrip gorsellerini yazar (ekstra istek YOK). Plana/HTML rapora gorsel kanit ekler. - GEO / llms.txt:
--geo→ robots.txt'te AI-crawler (GPTBot/ClaudeBot/Google-Extended...) durumu +llms.txtvarligi. Derinlik:references/teknik-seo-derin.md(AI-crawler tablosu). - CI butce kapisi:
--budget "perf=90,lcp=2500,cls=0.1,seo=90,a11y=90"→ esik ihlalinde exit 1 + BUTCE ozeti (yapiyi kirmizi yapmak icin). Kategori: skor>=esik; metrik: deger<=esik (ms/CLS). - Oncesi/sonrasi diff:
python3 scripts/psi_diff.py eski.json yeni.json [--fail-on-regression]→ kategori/CWV/denetim deltalari; regresyonda exit 1. - Trend gecmisi:
--history <dosya.jsonl>→ her kosuyu kompakt bir JSONL kaydina ekler (skor + CWV).python3 scripts/psi_diff.py --trend <dosya.jsonl>→ zaman-sirali skor/CWV trend tablosu (Markdown). - Deterministik plan (LLM'siz):
python3 scripts/psi_plan.py psi_veri.json --out plan.md→ JSON'dan bu SKILL'in plan iskeletini (ozet/CWV/oncelik/bulgu+kanit) kod ile uretir. Claude'un yazdigi zengin plana bir baseline/alternatiftir; ag yok. - Paylasilabilir HTML rapor:
python3 scripts/psi_report.py psi_veri.json --out rapor.html→ kendine-yeter (harici istek yok) tek dosya; skor kartlari, CWV, bulgular +detailskaniti, filmstrip. - Kod-tarafi kontrast:
python3 scripts/contrast.py "#onrenk" "#arkaplan" [--large] [--behind <zemin>]→ WCAG orani + AA/AAA; AA gecmezse exit 1 (chrome gerekmez).
Plan formati (Markdown)
- Ozet – URL (gerekirse
finalUrl/redirect notu), test tarihi, strateji(ler), kosu sayisi, kategori skor tablosu (mobil vs masaustu) vecounts("PSI'de N bulgu, M duzeltilecek"). - Core Web Vitals – LCP / INP (veya TBT) / CLS icin lab + varsa saha + etiket;
labVsFieldGapsvarsa vurgula. - Oncelikli aksiyonlar – Etki x Efor matrisine gore sirali tablo (ilk 5-10): | # | Aksiyon | Etki | Efor | Tahmini kazanc | Ilgili denetim |
- Tum performans bulgulari –
auditsByCategory.performance'in tamami, grup grup (Firsatlar / Tanilar / Insights).thirdParties,resourceSummaryvelargestResources(en agir tekil dosyalar — gizli logo/ikon darbogazini yakalar) ile destekle. - SEO / Projeye Ozel Aksiyonlar – yerlesik
references/derinliginden (+ claude-seo kuruluysa). Her madde: PSI SEO denetimi +descriptiononerisi + varsadetailskaniti. - Erisilebilirlik & En Iyi Uygulamalar – ilgili
auditsByCategorydenetimlerinin tamami; her bulgudadetailskaniti (hangi element + deger → hedef) somut yazilir. Bkz.references/schema-ve-erisilebilirlik.md(kontrast/tap-target/alt yazim tablosu). - Teknolojiye ozel notlar –
stackPacksozeti. - Sonraki adimlar / tekrar test – degisiklik CANLIYA ciktiktan SONRA (bkz. "Derin teshis" #4 — deploy/cache dogrulamasi) ayni URL'yi yeniden calistir.
Plani teknik ekibin dogrudan uygulayabilecegi somutlukta yaz: her maddede ne, nerede, neden.
Onceliklendirme kurallari
- Etki:
savingsMs(firsatlar/insights); ucuncu taraftablockingMs; digerlerinde denetimweighti + skor dusuklugu.labVsFieldGaps'te saha kotuyse o metrigi yukari tasi. - Efor (tahmini): resim sikistirma/format, alt metin, meta aciklama, kontrast, cache baslik ayari = dusuk; kullanilmayan JS/CSS, lazy-load, 3P script erteleme = orta; sunucu yaniti/TTFB, kritik CSS, mimari/render, font stratejisi = yuksek.
- Ilk 3-5 aksiyon "yuksek etki + dusuk/orta efor".
- Spekulatif kovalamama: dusuk-kazancli bulgularda (
unused-javascript/unused-css) once mevcut durumu dogrula (build'de code-splitting zaten var mi, ana bundle vs ayri chunk) — korlemesine kovalama.
Core Web Vitals esikleri (referans)
- LCP: <=2.5 sn iyi, <=4.0 sn gelistirilmeli, >4.0 sn zayif
- INP: <=200 ms iyi, <=500 ms gelistirilmeli, >500 ms zayif
- CLS: <=0.1 iyi, <=0.25 gelistirilmeli, >0.25 zayif
- FCP (lab): <=1.8 sn iyi; TBT (lab): <=200 ms iyi
- Kategori skoru: 90-100 iyi, 50-89 gelistirilmeli, 0-49 zayif
Derin teshis ve yaygin tuzaklar (saha dersleri)
Ozet metrikler kok nedeni GIZLEYEBILIR. Skor iyilesmiyorsa veya bir metrik inatciysa:
-
"Gorsel agir ama LCP gorseli optimize" celiskisi → tekil buyuk kaynaklara bak.
resourceSummarysadece TUR TOPLAMI verir (or. "image: 371 KB") ve tek bir sisman dosyayi gizler — cogu zaman logo / header ikonu. OncelargestResources'a bak; supheliyse dosyayicurl -s -o /dev/null -w '%{size_download}' <url>ile OLC. Header'da eager yuklenen global gorseller (logo) LCP gorseliyle bant genisligi yarisir → LCP'yi tikar. Cok siklikla bir gorsel, optimizasyon pipeline'i (CDNf_auto/q_auto,<img>wrapper) DISINDA kalmistir. CDN transform byte-testi: ayni gorseli varyantlarda olcup karsilastir —curl -s -o /dev/null -w '%{size_download} %{content_type}\n'ilew_800/q_auto/f_auto(Cloudinary/imgix/Unsplash) "hangi boyut/format ne kadar" tablosu cikar. Canlida GERCEKTE inen kaynagi dogrula: gorsel CMS/DB'den geliyorsa koddaki fallback URL'yi duzeltmek etkisiz kalabilir. -
SPA'da gec-LCP. LCP gorseli JS render + API cagrisi sonrasi indirilmeye baslarsa (React/Vue/SPA)
fetchpriority=highbile gec devreye girer. Cozum: HTML'e sunucu-taraflı<link rel=preload as=image>enjekte et ya da URL'yi HTML'e inline ver. Preload URL'si<img>'in gercekte indirdigiyle BIREBIR eslesmeli (CDN transform +srcset/sizesdahil), yoksa cift indirme olur ve preload bosa gider. -
a11y/
color-contrast: "hangi element" bilgisi ZATEN PSIdetails'inde — chrome GEREKMEZ.extract_details,color-contrast/image-alt/link-name/target-sizeicin node (selector/snippet) + degerini (oran/boyut) verir. Oncelik sirasi:- PSI
details(birincil) — hangi element/renk buradan cikar. curlile canli kaynak/renk dogrulama.- Kaynaga erisim varsa
scripts/contrast.py "#onrenk" "#arkaplan"ile WCAG orani + AA/AAA; yari-saydam/rgba icin--behind <zemin>(red-600/40gibi renkler zemine harmanlanir). Korlemesine tema degistirme. - Opsiyonel CLI (kuruluysa, duzeltme sonrasi 0-ihlal teyidi):
npx lighthouse --only-categories=accessibility,@axe-core/cliveyapa11y(Chrome ister, MCP degil). chrome-devtools yalnizca kuruluysa opsiyonel bir alternatiftir; hicbir adim ona bagli degil.
- PSI
-
Retest'ten ONCE degisikligin CANLIDA oldugunu DOGRULA.
autoDeploykapali olabilir, manuel deploy gerekebilir, CDN/HTML cache bayat olabilir → yoksa eski surumu olcup "degismedi" sanirsin. Oncecurl -s <url> | grep '<beklenen-asset-veya-markup>'ile yeni surumu teyit et, sonra PSI'yi tekrar calistir. -
PSI kota (429) yonetimi ve PSI'siz teshis. Anahtarsiz gunluk limit dusuktur; ayni gun birkac tam testte dolar. Doldugunda:
PSI_API_KEYkullan (yarin sifirlanir),--runs 1'e dus, ya da PSI'yi atla —curlbyte olcumu (curl -s -o /dev/null -w '%{size_download} %{content_type}') kaynak agirligini/formatini, opsiyonelnpx lighthouse(kuruluysa) lab tarafini PSI'siz verir. Once/sonra dogrulamasi icin PSI sart degil: aynicurlbyte olcumunu iki surumde karsilastir. (chrome-devtools kuruluysa network paneli + lighthouse de kullanilabilir — opsiyonel.) -
"Deploy sonrasi hicbir sey degismedi" = kok neden YANLIS (iterasyon refleksi). Degisiklik CANLIDA (bkz. #4) ama metrik OYNAMADIYSA, hipotezin yanlisti → duzeltmeyi geri sorgula ve baska darbogaz ara (bizde bu, gizli logo darbogazini yakalatti). Bir bulguyu "duzelttim" sanip gecme; olc, tutmadiysa kok nedeni degistir.
Notlar
- Betik yalnizca okuma yapar; siteyi degistirmez.
auditsByCategoryPSI'nin metrik disindaki tum gorunur denetimlerini icerir; gizli (grupsuz) ve "uygulanamaz/manuel" denetimler PSI'de de gosterilmedigi icin haric tutulur.- Lab verisi her zaman doner; saha (CrUX) verisi yalnizca yeterli trafigi olan sayfalarda bulunur.
- Medyan-of-3 lab varyansini azaltir; kucuk oynamalar normaldir.
- Iki
--outdosyasini elle karsilastirarak "onceki/sonraki" (baseline/diff) bakisi elde edebilirsin.
What ships with it: 19 files
2312.2 KB alongside SKILL.md, 6 of them executable
assets/
- banner.png1460.8 KB
- report-ornek.png298.7 KB
- schema.png443.1 KB
references/
- core-web-vitals-derin.md5.5 KB
- ornek_plan_iskeleti.md1.5 KB
- schema-ve-erisilebilirlik.md5.2 KB
- seo-performans-ajan.md2.6 KB
- teknik-seo-derin.md5.5 KB
scripts/
- contrast.pyruns3.7 KB
- psi_audit.pyruns28.4 KB
- psi_diff.pyruns7.2 KB
- psi_plan.pyruns6.8 KB
- psi_report.pyruns14.4 KB
- test_psi_audit.pyruns6.0 KB
- .gitignore135 B
- LICENSE1.0 KB
- NOTICE.md2.0 KB
- README.en.md9.7 KB
- README.md9.8 KB