core-web-vitals
Skill0 starsChanged 2 days agoMITView on GitHub
Measure and improve Core Web Vitals (LCP, INP, CLS) from real-user field data using the Chrome UX Report: p75 values for phone and desktop, page versus origin fallback, good / needs improvement / poor thresholds from web.dev, and what to fix for each failing metric (LCP subparts, long tasks and input delay, layout shifts). Use when the user asks 'Core Web Vitals', 'LCP too slow', 'INP', 'CLS', 'PageSpeed Insights says...', 'is my site fast enough', 'page experience', 'why is the CrUX data missing', or 'PSI API field data'. Uses sitetiller cwv and crux-history (needs a CrUX API key; see the setup skill).
- Reads credentials
34 other projects use a version of this.
Adopted by
Most recently taken up by
- 6t9xstar/one-step-seotheir own version, first seen Nov 8, 2026
- theopenco/llmgatewaytheir own version, first seen Nov 6, 2026
- jbobbink/seo-gsc-wizardtheir own version, first seen Nov 1, 2026
- advisorppc-org/advisorseo-claude-plugintheir own version, first seen Nov 1, 2026
- xuweizhengo/skills-hubtheir own version, first seen Nov 1, 2026
- joaoguirunas/team-ostheir own version, first seen Nov 1, 2026
Used with
Projects with it also use javascript-seo, web-quality-audit and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MYehia565Skilljavascript-seo
Diagnoses JS rendering, lazy-loading, and indexing gaps for client-rendered pages. Use when content appears in the browser but not in fetched HTML or Search.
Also in 4 projects that use this
RodrigoTomeESSkillweb-quality-audit
Comprehensive web quality audit covering performance, accessibility, SEO, and best practices. Use when asked to "audit my site", "review web quality", "run lighthouse audit", "check page quality", or "optimize my website".
Also in 12 projects that use this
huiferSkillstructured-data
生成和验证 JSON-LD 结构化数据,支持 Article、BlogPosting、Organization、WebPage、Product、LocalBusiness 等 Schema.org 类型。自动检测页面类型,验证语法,检查必需字段,提供 Google Rich Results 测试工具链接和 Next.js 组件代码示例。
Also in 3 projects that use this
kpbraySkillbest-practices
Applies Power BI best practices, BPA rules, and enterprise standards. Use for quality validation, naming conventions, and performance optimization.
Also in 7 projects that use this
ElasticSkillaccessibility
Accessibility guidance for Kibana. Use this skill when working with or reviewing EUI components, resolving a11y-related (@elastic/eui) ESLint issues, and ensuring proper use of ARIA attributes, focus management, keyboard interactions, and accessible naming conventions.
Also in 18 projects that use this
nilssonrSkillseo
Full SEO workflow for auditing pages and creating SEO-optimized content. Provides checklists with educational explanations aligned with Google Search Central documentation.
Also in 10 projects that use this
Other versions34 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 34
- midudev/preguntas-entrevista-react★ 7.8ksame name
- theopenco/llmgateway★ 1.7ksame name
- vmDeshpande/ai-agent-automation★ 177same name
- PracticalSwan/agent-skills★ 22same name
- Quality-Max/free-qa-skills★ 13same name
- RodrigoTomeES/getmcp★ 13same name
- 4gentic/obelus★ 8same name
- carlosuhart/seo-audit-skills★ 6same name
- joaoguirunas/team-os★ 6same name
- 6t9xstar/one-step-seo★ 5same name
24 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- agent-readySkill
- ai-citationsSkill
- ai-crawlersSkill
- ai-logsSkill
- ai-trackerSkill
- backlinksSkill
- cannibalizationSkill
- canonicalsSkill
- citabilitySkill
- comparison-pagesSkill
- competitorsSkill
- content-briefSkill
- content-decaySkill
- content-qualitySkill
- ecommerce-seoSkill
- ga4-aiSkill
- ghost-publishSkill
- gsc-bingSkill
- hreflangSkill
- imagesSkill
- indexingSkill
- internal-linksSkill
- llms-txtSkill
- local-seoSkill
- measure-rollbackSkill
- onpageSkill
- platformsSkill
- pseo-quality-gateSkill
- quick-winsSkill
- redirects-migrationSkill
- schemaSkill
- seo-planSkill
- seo-reportSkill
- setupSkill
- site-architectureSkill
- sitemapsSkill
- static-site-publishSkill
- sxoSkill
- tech-auditSkill
- titles-metaSkill
- topic-clustersSkill
- weekly-checkSkill
- wordpress-publishSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 8 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 50
Never lazy-load the LCP image.
- Distinctive: line 65
Keep pages eligible for the back/forward cache.
- Distinctive: line 75
When to re-measure: after the 28-day window.
- Distinctive: line 76
If no field data: say so and what was used instead.
- Distinctive: line 86
Do not call a lab score a Core Web Vitals result.
- Distinctive: line 87
Do not promise a ranking gain.
- Distinctive: line 88
Do not invent other thresholds (for example TTFB limits, JavaScript size budgets).
- Distinctive: line 89
Do not cite a PSI API removal date: Google gave none.
“Common” is measured: kept by at least 6 in 10 of the 16 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Core Web Vitals
Goal: say precisely which metric fails for which device and URL (or origin) from real-user data, then give the fixes that web.dev documents for that metric. Google recommends good Core Web Vitals and says they align with what its core ranking systems seek to reward; it states no ranking boost or weight, so never promise one.
Inputs
- The URL(s) that matter (home, a key template, the worst-traffic page) and the origin.
CRUX_API_KEYset (seesetup).
Thresholds (web.dev), judged at the 75th percentile, mobile and desktop separately
| Metric | Good | Needs improvement | Poor |
| LCP, Largest Contentful Paint | 2.5 s or less | between | over 4 s |
| INP, Interaction to Next Paint | 200 ms or less | between | over 500 ms |
| CLS, Cumulative Layout Shift | 0.1 or less | between | over 0.25 |
A page passes when all three are good at p75. FID is retired; INP is the responsiveness metric.
Steps
- Measure phone first, then desktop, for the page and for the origin:
Output:npx sitetiller cwv https://example.com/pricing --json npx sitetiller cwv https://example.com/pricing --form DESKTOP --json npx sitetiller cwv https://example.com/ --origin --json npx sitetiller cwv https://example.com/ --origin --form DESKTOP --jsontarget,formFactor,available,collectionPeriod,metrics[](metric,p75,rating) andpasses.p75is in milliseconds for LCP and INP and a unitless score for CLS.ratingisgood,needs improvementorpoorusing the table above. The CrUX data is a 28-day rolling window, updated daily, about two days behind. - If
availableis false, the URL has too little Chrome traffic for CrUX to report it. Try--origin. The CrUX docs describe a URL query as data for that exact URL only and an origin query as data for all pages in the origin; the API does not follow redirects, so test the final URL (check withpage). Say "no field data" and move to lab data: it is not a failing score. - See the trend and where LCP time goes (CrUX History API, weekly points, up to 40 periods):
Output:npx sitetiller crux-history https://example.com/pricing --json npx sitetiller crux-history https://example.com/ --origin --periods 40 --jsonperiods(end date of each weekly collection period),metricsper Core Web Vital (seriesof p75s,latest,latestRating,change4win % of the last 4 points against the 4 before,trendbetter/worse/flat),lcpBreakdown(p75 of TTFB, resource load delay, resource load duration and element render delay, each with its share),biggestLcpPartandadvice. Subparts are separate p75s, so they need not add up to the LCP p75. Use the trend to date a regression (a deploy, a new script) and the breakdown to pick the LCP fix below. - Pick the failing metric and device. Fix the worst first; fixes below. Re-measure after the 28-day window rolls: field data cannot confirm a fix the next day.
- Use lab tools to find causes, not to grade. Google's web.dev says field data is what you should use to prioritise, while lab runs (Lighthouse, PageSpeed Insights lab section) load a page once under fixed conditions and can miss INP problems because Total Blocking Time ignores tap delay. Run Lighthouse or Chrome DevTools on the failing page and compare.
Fixes by metric (web.dev)
LCP
Break the time into four parts and find the oversized one. Ideal shares of LCP time: time to first byte about 40%, resource load delay under 10%, resource load duration about 40%, element render delay under 10%.
- Resource load delay large: add
fetchpriority="high"to the image you expect to be the LCP element (only one or two images; more dilutes it). If the image is only referenced from CSS or JavaScript, preload it with<link rel="preload">. - Never lazy-load the LCP image.
- Slow TTFB or long load duration: serve from a CDN, serve images from the same origin as the HTML where possible, use an image CDN or smaller formats to shrink files.
- Element render delay large or LCP element not in the first HTML: avoid client-side rendering for it; use server-side rendering or prerendering so the LCP resource is discoverable in the initial HTML.
INP
INP has three phases: input delay, processing duration, presentation delay.
- Input delay: reduce long tasks (any task over 50 ms) during load, such as script evaluation at startup.
- Processing: do as little work as possible in event callbacks; yield to the main thread (
await scheduler.yield()with asetTimeoutfallback, orsetTimeout); defer non-critical work (saves, counts) to later tasks; avoid layout thrashing (changing styles then reading layout in the same task). - Presentation: reduce DOM size; use
content-visibilityfor off-screen content; be careful rendering large HTML with client-side JavaScript. Web.dev's long-task article says developers no longer recommendisInputPending(); use yielding.
CLS
- Set
widthandheightattributes on images and video (or CSSaspect-ratio) so space is reserved. - Reserve space for ads and embeds (
min-heightoraspect-ratio); keep a placeholder if the ad does not load. - Web fonts:
font-display: optionalavoids a late re-layout; choose a close fallback and tune it withsize-adjust; preload critical fonts. - Keep pages eligible for the back/forward cache.
- Animate with
transform, nottoporleft.
PageSpeed Insights note
The PageSpeed Insights API documentation says: "We plan to discontinue including real-world data from the Chrome User Experience Report in this API." and recommends the CrUX API or the CrUX History API instead. The page gives no date. PSI release notes (last entry read: 2025-10-20, Lighthouse 13) show no removal yet. So: do not build new tooling on the PSI API's field data (loadingExperience); use the CrUX API, which is what cwv does. PSI's lab data is Lighthouse and is unaffected by that notice.
Output to the user
- A table per device: metric, p75, rating, target (page or origin), collection period.
- The failing metric(s) and the likely cause class (for LCP, which subpart) once lab data or DevTools shows it.
- Three fixes in priority order, each tied to a web.dev guidance above.
- When to re-measure: after the 28-day window.
- If no field data: say so and what was used instead.
Lab runs for many pages
npx sitetiller lighthouse --file key-urls.txt --strategy mobile --jsonOne PageSpeed Insights request per URL, 2 s apart. Output per URL: Lighthouse scores (performance, accessibility, bestPractices, seo, 0-100), metrics (lcpMs, fcpMs, tbtMs, cls, speedIndexMs) and the top 5 opportunities by estimated savings; plus median and the worst five. Set PSI_API_KEY (a Google Cloud key with the PageSpeed Insights API enabled); without a key the shared quota is often exhausted. Use this to find which templates are slow and why; pass or fail stays a field-data decision.
Guardrails
- Judge pass or fail only on field p75 per device; do not average phone and desktop.
- Do not call a lab score a Core Web Vitals result.
- Do not promise a ranking gain. Google says only that the metrics align with what its ranking systems seek to reward.
- Do not invent other thresholds (for example TTFB limits, JavaScript size budgets); none are given in the sources here.
- Do not cite a PSI API removal date: Google gave none.
References
references/sources.md: web.dev, Chrome and Google documentation, checked 2026-11-12.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

