{"id":139060,"date":"2022-02-23T02:00:40","date_gmt":"2022-02-23T07:00:40","guid":{"rendered":"https:\/\/ahrefs.com\/blog\/?p=139060"},"modified":"2025-01-22T18:30:38","modified_gmt":"2025-01-22T23:30:38","slug":"core-web-vitals","status":"publish","type":"post","link":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/","title":{"rendered":"What Are Core Web Vitals (CWVs) &amp; How To Improve Them"},"content":{"rendered":"<div class=\"intro-txt\">Core Web Vitals are 3 metrics that Google uses to measure a user\u2019s experience on a webpage by looking at visual load speed, visual stability, and interactivity \/ responsiveness. The metrics are Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), and Interaction to Next Paint (INP). FID was replaced by Interaction to Next Paint (INP) on March 12th,&nbsp;2024.<\/div>\n\n\n\n<p>The data comes from the Chrome User Experience Report (CrUX) which contains field data of Chrome users who opted to share their&nbsp;data.<\/p>\n\n\n\n<p>Mobile page experience and the included Core Web Vital metrics have&nbsp;officially been used for ranking pages since May 2021.&nbsp;Desktop signals have also been used as of February 2022.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1331\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/1-page-experience-signals.jpg\" alt=\"Google's Page Experience signals include https, no intrusive interstitials, mobile-friendliness, and core web vitals\" class=\"wp-image-139039\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/1-page-experience-signals.jpg 1600w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/1-page-experience-signals-511x425.jpg 511w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/1-page-experience-signals-768x639.jpg 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/1-page-experience-signals-1536x1278.jpg 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>The benchmarks for each category are as follows:<\/p>\n\n\n\n<table id=\"tablepress-116\" class=\"tablepress tablepress-id-116 tablepress-responsive tablepress-ahrefs-width-720px\">\n<thead>\n<tr class=\"row-1 odd\">\n\t<th class=\"column-1\"><\/th><th class=\"column-2\">Good<\/th><th class=\"column-3\">Needs improvement<\/th><th class=\"column-4\">Poor<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-hover\">\n<tr class=\"row-2 even\">\n\t<td class=\"column-1\"><strong>LCP<\/strong><\/td><td class=\"column-2\">&lt;=2.5s<\/td><td class=\"column-3\">&gt;2.5s - &lt;=4s<\/td><td class=\"column-4\">&gt;4s <\/td>\n<\/tr>\n<tr class=\"row-3 odd\">\n\t<td class=\"column-1\"><strong>INP<\/strong><\/td><td class=\"column-2\">&lt;=200ms<\/td><td class=\"column-3\">&gt;200ms - &lt;=500ms<\/td><td class=\"column-4\">&gt;500ms<\/td>\n<\/tr>\n<tr class=\"row-4 even\">\n\t<td class=\"column-1\"><strong>CLS<\/strong><\/td><td class=\"column-2\">&lt;=0.1<\/td><td class=\"column-3\">&gt;0.1 - &lt;=0.25<\/td><td class=\"column-4\">&gt;0.25<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-116 from cache -->\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>Let\u2019s look at each Core Web Vital in more detail and how you can get your pages to pass the checks.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#1-LCP\">Largest Contentful Paint (LCP)<\/a><\/li>\n\n\n\n<li><a href=\"#2-CLS\">Cumulative Layout Shift (CLS)<\/a><\/li>\n\n\n\n<li><a href=\"#INP\">Interaction to Next Paint (INP)<\/a><\/li>\n\n\n\n<li><a href=\"#3-FID\">First Input Delay (FID)<\/a><\/li>\n\n\n\n<li><a href=\"#4-measurement-tools\">How to measure Core Web Vitals<\/a><\/li>\n\n\n\n<li><a href=\"#improve-cwvs\">How to improve Core Web Vitals<\/a><\/li>\n\n\n\n<li><a href=\"#5-cwv-importance\">Are Core Web Vitals important for&nbsp;SEO?<\/a><\/li>\n\n\n\n<li><a href=\"#6-quick-facts\">Quick facts about Core Web Vitals<\/a><\/li>\n<\/ul>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"Largest Contentful Paint (LCP)\" data-section=\"1-LCP\">\n<h2>Largest Contentful Paint (LCP)<\/h2>\n<\/div><\/div>\n\n\n\n<p>Largest Contentful Paint (LCP) is the amount of time it takes to load the single largest visible element in the viewport. It represents the website being visually loaded.<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><img decoding=\"async\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/6-largest-contentful-paint.png\" alt=\"Largest Contentful Paint thresholds\"><figcaption class=\"wp-element-caption\">Source: <a href=\"https:\/\/web.dev\/vitals\/\">web.dev<\/a><\/figcaption><\/figure>\n\n\n\n<p>The largest element is usually going to be a featured image or maybe the &lt;h1&gt; tag. But it could also be any of&nbsp;these:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&lt;img&gt; element<\/li>\n\n\n\n<li>&lt;image&gt; element inside an &lt;svg&gt; element<\/li>\n\n\n\n<li>Image inside a &lt;video&gt; element<\/li>\n\n\n\n<li>Background image loaded with the url() function<\/li>\n\n\n\n<li>Blocks of&nbsp;text<\/li>\n<\/ul>\n\n\n\n<p>&lt;svg&gt; and &lt;video&gt; may be added in the future.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to see the LCP element<\/h3>\n\n\n\n<p>In <a href=\"https:\/\/ahrefs.com\/blog\/pagespeed-insights\/\">PageSpeed Insights<\/a>, the LCP element will be specified in the \u201cDiagnostics\u201d section. Also, notice there is a tab to select LCP that will only show issues related to&nbsp;LCP.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1113\" height=\"1600\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/7-lcp-psi.jpg\" alt=\"Largest Contentful Paint issues in PageSpeed Insights point to the blue LCP tab\" class=\"wp-image-139057\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/7-lcp-psi.jpg 1113w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/7-lcp-psi-296x425.jpg 296w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/7-lcp-psi-768x1104.jpg 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/7-lcp-psi-1068x1536.jpg 1068w\" sizes=\"auto, (max-width: 1113px) 100vw, 1113px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n\n<p>In Chrome DevTools, follow these&nbsp;steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Performance &gt; check \u201cScreenshots\u201d<\/li>\n\n\n\n<li>Click \u201cStart profiling and reload page\u201d<\/li>\n\n\n\n<li>LCP is on the timing graph<\/li>\n\n\n\n<li>Click the node; this is the element for&nbsp;LCP<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/8-chrome-dev-tools.png\" alt=\"Checking LCP in Chrome DevTools\"><\/figure>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"Cumulative Layout Shift (CLS)\" data-section=\"2-CLS\">\n<h2>Cumulative Layout Shift (CLS)<\/h2>\n<\/div><\/div>\n\n\n\n<p>Cumulative Layout Shift (CLS) measures the visual stability of a page as it loads. It does this by looking at how big elements are and how far they&nbsp;move.<\/p>\n\n\n\n<p>Google has already updated how CLS is measured. Previously, it would continue to measure even after the initial page load. But now it\u2019s restricted to a five-second time frame where the most shifting occurs.<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><img decoding=\"async\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/13-cumulative-layout-shift.png\" alt=\"Cumulative Layout Shift thresholds\"><figcaption class=\"wp-element-caption\">Source: <a href=\"https:\/\/web.dev\/vitals\/\">web.dev<\/a><\/figcaption><\/figure>\n\n\n\n<p>It can be annoying if you try to click something on a page that shifts and you end up clicking on something you don\u2019t intend to. It happens to me all the time. I click on one thing and, suddenly, I\u2019m clicking on an ad and am now not even on the same website. As a user, I find that frustrating.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"909\" height=\"421\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/14-cumulative-layout-shift-example.gif\" alt=\"Example of the layout shifting when trying to click a link\" class=\"wp-image-139048\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n\n<p>Common causes of CLS include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Images without dimensions.<\/li>\n\n\n\n<li>Ads, embeds, and iframes without dimensions.<\/li>\n\n\n\n<li>Injecting content with JavaScript.<\/li>\n\n\n\n<li>Applying fonts or styles late in the&nbsp;load.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to see&nbsp;CLS<\/h3>\n\n\n\n<p>In PageSpeed Insights, if you select CLS, you can see all the related issues. The main one to pay attention to here is \u201cAvoid large layout shifts.\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1151\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/15-cls-psi.jpg\" alt=\"CLS issues in PageSpeed Insights\" class=\"wp-image-139049\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/15-cls-psi.jpg 1600w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/15-cls-psi-591x425.jpg 591w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/15-cls-psi-768x552.jpg 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/15-cls-psi-1536x1105.jpg 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n\n<p>We\u2019re using <a href=\"https:\/\/www.webpagetest.org\/\">WebPageTest<\/a>. In Filmstrip View, use the following options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Highlight Layout Shifts<\/li>\n\n\n\n<li>Thumbnail Size:&nbsp;Huge<\/li>\n\n\n\n<li>Thumbnail Interval: 0.1&nbsp;secs<\/li>\n<\/ul>\n\n\n\n<p>Notice how our font restyles between 5.1 secs and 5.2 secs, shifting the layout as our custom font is applied.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"764\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/16-web-page-test.jpg\" alt=\"Layout shift from applying a custom font\" class=\"wp-image-139050\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/16-web-page-test.jpg 1600w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/16-web-page-test-680x325.jpg 680w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/16-web-page-test-768x367.jpg 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/16-web-page-test-1536x733.jpg 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n\n<p><a href=\"https:\/\/www.smashingmagazine.com\/2021\/01\/smashingmag-performance-case-study\/\">Smashing Magazine<\/a>&nbsp;also had an interesting technique where it outlined everything with a 3px solid red line and recorded a video of the page loading to identify where layout shifts were happening.<\/p>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"Interaction to Next Paint (INP)\" data-section=\"INP\">\n<h2>Interaction to Next Paint (INP)<\/h2>\n<\/div><\/div>\n\n\n\n<p>Interaction to Next Paint (INP) measures how quickly a website responds to user interactions. It is one of the Core Web Vital metrics and uses data from the Event Timing API to observe the latency of all click, tap, and keyboard interactions with a page throughout its lifespan.<\/p>\n\n\n\n<p>To have a good INP rating, INP needs to be less than or equal to 200 milliseconds. INP between 200 milliseconds and 500 milliseconds would be considered average, and below 500 milliseconds would indicate poor responsiveness.<\/p>\n\n\n\n<p>INP replaced FID as a Core Web Vital in March 2024. It measures all user interactions instead of just the first&nbsp;one.<\/p>\n\n\n\n<p>INP is more comprehensive than FID because it is sensitive to all user interactions, while FID is just concerned with the \u201cfirst\u201d interaction.<\/p>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"First Input Delay (FID)\" data-section=\"3-FID\">\n<h2>First Input Delay (FID)<\/h2>\n<\/div><\/div>\n\n\n\n<p>First Input Delay (FID) is the time from when a user first interacts with your page to when the page responds. It measures responsiveness.<\/p>\n\n\n\n<p>FID was replaced as a Core Web Vital by Interaction to Next Paint (INP) on March 12th,&nbsp;2024.<\/p>\n\n\n\n<p>Example interactions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clicking on a link or button<\/li>\n\n\n\n<li>Inputting text into a blank&nbsp;field<\/li>\n\n\n\n<li>Selecting a drop-down menu<\/li>\n\n\n\n<li>Clicking a checkbox<\/li>\n<\/ul>\n\n\n\n<p>Some events like scrolling or zooming are not counted.<\/p>\n\n\n\n<p>It can be frustrating trying to click something, and nothing happens on the&nbsp;page.<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><img decoding=\"async\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/17-first-input-delay.png\" alt=\"First Input Delay thresholds\"><figcaption class=\"wp-element-caption\">Source: <a href=\"https:\/\/web.dev\/vitals\/\">web.dev<\/a><\/figcaption><\/figure>\n\n\n\n<p>Not all users will interact with a page, so the page may not have an FID value. This is also why lab test tools won\u2019t have the value because they\u2019re not interacting with the page. What you may want to look at for lab tests is Total Blocking Time (TBT). In PageSpeed Insights, you can use the TBT tab to see related issues.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/18-tbt-psi.jpg\" alt=\"TBT issues in PageSpeed Insights\"><\/figure>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">What causes the&nbsp;delay?<\/h3>\n\n\n\n<p>JavaScript competing for the main thread. There\u2019s just one main thread, and JavaScript competes to run tasks on it. Think of it like JavaScript having to take turns to&nbsp;run.<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><img decoding=\"async\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/19-cause-of-fid.png\" alt=\"Long tasks block the processing on the main thread and cause delays\"><figcaption class=\"wp-element-caption\">Source: <a href=\"https:\/\/web.dev\/vitals\/\">web.dev<\/a><\/figcaption><\/figure>\n\n\n\n<p>While a task is running, a page can\u2019t respond to user input. This is the delay that is felt. The longer the task, the longer the delay experienced by the user. The breaks between tasks are the opportunities that the page has to switch to the user input task and respond to what they wanted to&nbsp;do.<\/p>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"Tools for measuring Core Web Vitals\" data-section=\"4-measurement-tools\">\n<h2>How to measure Core Web Vitals<\/h2>\n<\/div><\/div>\n\n\n\n<p>There are many tools you can use for testing and monitoring. Generally, you want to see the actual field data from the Chrome User Experience Report (CrUX), which is what you\u2019ll be measured on. This data comes from real users of Chrome who opted to share their data. This dataset is <a href=\"https:\/\/developer.chrome.com\/docs\/crux\/\">accessible in a number of ways<\/a>.<\/p>\n\n\n\n<p>The numbers that really matter are the page-level numbers that you can only get from the API. These are the numbers Google will use if there\u2019s enough data about a page, otherwise they may use the numbers from a group of similar pages for the scoring or from the whole domain. Every other tool that has page level data will be getting it from this source either directly or indirectly.<\/p>\n\n\n\n<p>For example, Google Search Console pulls in the data and shows you how many URLs fall into each bucket.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1437\" height=\"1490\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/3-gsc-core-web-vitals-breakdown.png\" alt=\"Breakdown of Core Web Vitals issues in GSC\" class=\"wp-image-139056\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/3-gsc-core-web-vitals-breakdown.png 1437w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/3-gsc-core-web-vitals-breakdown-410x425.png 410w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/3-gsc-core-web-vitals-breakdown-768x796.png 768w\" sizes=\"auto, (max-width: 1437px) 100vw, 1437px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>Clicking into one of the issues gives you a breakdown of page groups that are impacted. This grouping of pages makes a lot of sense. This is because most of the changes to improve Core Web Vitals are done for a particular page template that impacts many pages. You make the changes once in the template, and that will be fixed across the pages in the&nbsp;group.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1421\" height=\"1552\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/4-gsc-page-group-issues.png\" alt=\"GSC page groups with specific issues\" class=\"wp-image-139041\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/4-gsc-page-group-issues.png 1421w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/4-gsc-page-group-issues-389x425.png 389w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/4-gsc-page-group-issues-768x839.png 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/4-gsc-page-group-issues-1406x1536.png 1406w\" sizes=\"auto, (max-width: 1421px) 100vw, 1421px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n\n<p><span style=\"font-weight: 400;\">PageSpeed Insights also pulls in the page level data, as well as origin data and lab test data which comes from <\/span><a href=\"https:\/\/developers.google.com\/web\/tools\/lighthouse\"><span style=\"font-weight: 400;\">Lighthouse<\/span><\/a><span style=\"font-weight: 400;\">. I\u2019ll talk about the lab data in a minute.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">PageSpeed Insights is great to check one page at a time. But if you want both lab data and field data at scale, the easiest way to get that is through their API. You can connect to it easily with <\/span><a href=\"https:\/\/ahrefs.com\/webmaster-tools\"><span style=\"font-weight: 400;\">Ahrefs Webmaster Tools (free)<\/span><\/a><span style=\"font-weight: 400;\"> or Ahrefs\u2019 <\/span><a href=\"https:\/\/ahrefs.com\/site-audit\"><span style=\"font-weight: 400;\">Site Audit<\/span><\/a><span style=\"font-weight: 400;\"> and get reports detailing your performance.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"644\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/20-core-web-vitals-ahrefs-site-audit.png\" alt=\"CWV reports in Ahrefs' Site Audit\" class=\"wp-image-139052\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/20-core-web-vitals-ahrefs-site-audit.png 1600w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/20-core-web-vitals-ahrefs-site-audit-680x274.png 680w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/20-core-web-vitals-ahrefs-site-audit-768x309.png 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/20-core-web-vitals-ahrefs-site-audit-1536x618.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n\n\n\n<div class=\"highlighted-section\"><!-- Title Section -->\n<h4 class=\"section-title\">Check for CWV issues for free with Site&nbsp;Audit<\/h4>\n<!-- Form Section --><form class=\"form-section\">\n<div class=\"input-button-wrapper\">\n<div class=\"input-container\"><input type=\"text\" placeholder=\"Enter domain\"><\/div>\n<a class=\"start-button\" href=\"\/signup?plan=awt&amp;return=site-audit\">Start for&nbsp;Free<\/a><\/div>\n<div class=\"tooltip-container\">Free for websites with verified ownership<span class=\"info-icon\">i<\/span>\n<div class=\"tooltip-content\">\n<p>Ownership verification can be done&nbsp;by:<\/p>\n<ul>\n<li>Connecting Google Search Console (recommended);<\/li>\n<li>Uploading an HTML&nbsp;file;<\/li>\n<li>Adding a TXT record to your DNS configuration;<\/li>\n<li>Adding an HTML meta tag to your homepage.<\/li>\n<\/ul>\n<a href=\"https:\/\/help.ahrefs.com\/en\/articles\/3275938-verifying-ownership-of-your-project-or-website\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more<\/a><\/div>\n<\/div>\n<p class=\"webmaster-tools-info\">Signing up here gives you access to <a href=\"https:\/\/ahrefs.com\/webmaster-tools\" target=\"_blank\" rel=\"noopener noreferrer\">Ahrefs Webmaster Tools \u2197<\/a> for&nbsp;free<\/p>\n<\/form><\/div>\n<p><style>\n  \/* Highlighted Section with Gray Border *\/\n  .highlighted-section {\n    border: 1px solid #ddd; \/* Light gray border *\/\n    border-radius: 8px;\n    padding: 15px 20px; \/* Adjusted padding to reduce top spacing *\/\n    background-color: #f9f9f9; \/* Light background for contrast *\/\n    max-width: 600px;\n    margin: 20px auto; \/* Center alignment *\/\n  }\n\n  \/* Section Title *\/\n  .section-title {\n    font-size: 24px; \/* Larger font size *\/\n    font-weight: bold;\n    color: #333;\n    margin-bottom: 15px;\n    margin-top: 0; \/* Remove extra spacing above the title *\/\n    text-align: center;\n  }\n\n  .form-section {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n  }\n\n  .input-button-wrapper {\n    display: flex;\n    gap: 10px; \/* Space between input and button *\/\n    align-items: center;\n  }\n\n  .input-container input {\n    padding: 10px;\n    font-size: 16px;\n    border: 1px solid #ddd;\n    border-radius: 4px;\n    width: 100%;\n  }\n\n  .tooltip-container {\n    position: relative;\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    font-size: 14px;\n    color: #555;\n    cursor: help;\n  }\n\n  .tooltip-container .info-icon {\n    color: #0073e6;\n    font-weight: bold;\n    font-size: 12px;\n    position: relative;\n    top: -5px;\n    display: inline-block;\n    text-decoration: none;\n    cursor: help;\n  }\n\n  .tooltip-content {\n    position: fixed; \/* Ensure tooltip can break out of its container *\/\n    top: 50px; \/* Adjust based on trigger position *\/\n    left: 50%; \/* Center horizontally *\/\n    transform: translateX(-50%);\n    background: white;\n    border: 1px solid #ddd;\n    border-radius: 5px;\n    box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);\n    padding: 15px;\n    font-size: 14px;\n    display: none; \/* Initially hidden *\/\n    z-index: 1000;\n    min-width: 300px;\n    max-width: 400px; \/* Optional width for better readability *\/\n    white-space: normal;\n  }\n\n  .tooltip-container:hover .tooltip-content {\n    display: block;\n  }\n\n  .tooltip-content ul {\n    list-style-type: disc;\n    padding-left: 20px;\n  }\n\n  .tooltip-content a {\n    color: #0073e6;\n    text-decoration: none;\n  }\n\n  .webmaster-tools-info {\n    color: #333;\n    font-size: 14px;\n    margin-top: 10px;\n  }\n\n  .start-button {\n    background-color: orange;\n    color: white;\n    padding: 10px 20px;\n    text-decoration: none;\n    font-weight: bold;\n    border-radius: 5px;\n    white-space: nowrap; \/* Ensure text doesn\u2019t break into a second line *\/\n  }\n<\/style><\/p>\n\n\n\n<p>There are many tools you can use for testing and monitoring. Generally, you want to see the actual field data, which is what you\u2019ll be measured on. But the lab data is more useful for testing.<\/p>\n\n\n\n<p>The difference between lab and field data is that field data looks at real users, network conditions, devices, caching, etc. But lab data is consistently tested based on the same conditions to make the test results repeatable.<\/p>\n\n\n\n<p>Many of these tools use <a href=\"https:\/\/developers.google.com\/web\/tools\/lighthouse\">Lighthouse<\/a>&nbsp;as the base for their lab tests. The exception is WebPageTest, although you can also run Lighthouse tests with it as well. The field data comes from&nbsp;CrUX.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Note that the Core Web Vitals data shown will be determined by the user-agent you select for your crawl during the setup. If you crawl from mobile, you\u2019ll get mobile CWV values.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">Field Data vs Lab&nbsp;Data<\/span><\/h3>\n\n\n\n<p><span style=\"font-weight: 400;\">The difference between lab and field data is that field data looks at real users, network conditions, devices, caching, etc. But lab data is consistently tested based on the same conditions to make the test results repeatable.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">The lab test data is more useful for testing since the CWV data is on a 28 day rolling average. Any changes you make won\u2019t be seen in the CWV data for a while but will be reflected in lab test data after the changes are&nbsp;made.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">There are some additional tools you can use to gather your own Real User Monitoring (RUM) data. This is gathering your own field data from your own users. This kind of data can provide more immediate feedback on how speed improvements impact your actual users, rather than just relying on lab&nbsp;tests.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Free tool: Check CWVs and Lighthouse metrics for desktop and mobile for up to 10 pages or websites<\/h3>\n\n\n\n<p>Here\u2019s another free tool that you can use to check up to 10 pages or websites at once to see how you compare to your competitors.<\/p>\n\n\n\n<p><strong>Setup:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enter your Google PageSpeed Insights API key into the designated input field. (Learn how to generate an API key <a href=\"https:\/\/developers.google.com\/speed\/docs\/insights\/v5\/get-started\">here<\/a>.)<\/li>\n\n\n\n<li>Add the URLs you want to analyze (one per&nbsp;line).<\/li>\n<\/ul>\n\n\n\n<p><strong>Run the Analysis:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Click on the <strong>\u201cCheck CWV\u201d<\/strong> button to start fetching metrics. A progress indicator will show the status of the requests.<\/li>\n<\/ul>\n\n\n\n<p><strong>View Results:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The results are displayed in neatly categorized scorecards:&nbsp;<ul class=\"wp-block-list\">\n<li><strong>Desktop CWV for the&nbsp;Page<\/strong><\/li>\n\n\n\n<li><strong>Desktop CWV for the Origin<\/strong><\/li>\n\n\n\n<li><strong>Desktop Lighthouse<\/strong><\/li>\n\n\n\n<li><strong>Mobile CWV for the&nbsp;Page<\/strong><\/li>\n\n\n\n<li><strong>Mobile CWV for the Origin<\/strong><\/li>\n\n\n\n<li><strong>Mobile Lighthouse<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Each metric is color-coded to show performance:&nbsp;<ul class=\"wp-block-list\">\n<li><strong>Green:<\/strong> Good<\/li>\n\n\n\n<li><strong>Yellow:<\/strong> Needs Improvement<\/li>\n\n\n\n<li><strong>Red:<\/strong> Poor<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div id=\"cwv-tool\">\n<h4 class=\"title\">Core Web Vitals Bulk Checker<\/h4>\n  <form id=\"cwv-form\">\n    <input id=\"apiKey\" required type=\"text\" placeholder=\"Enter your PageSpeed Insights API key\">\n    <textarea id=\"urls\" required placeholder=\"Enter up to 10 URLs, one per line\"><\/textarea>\n    <button type=\"button\" onclick=\"checkCWV()\">Check CWVs<\/button>\n  <\/form>\n  <div id=\"progress\"><\/div>\n  <div id=\"results\"><\/div>\n<\/div>\n\n<script>\nasync function checkCWV() {\n  const apiKey = document.getElementById(\"apiKey\").value.trim();\n  const urls = document.getElementById(\"urls\").value.split(\"\\n\").map(url => url.trim()).filter(url => url);\n  const progress = document.getElementById(\"progress\");\n  const resultsContainer = document.getElementById(\"results\");\n\n  if (!apiKey || urls.length === 0) {\n    alert(\"Please provide an API key and at least one URL.\");\n    return;\n  }\n\n  progress.textContent = \"Fetching data...\";\n  resultsContainer.innerHTML = \"\";\n\n  const results = {\n    desktopPageCWV: [],\n    desktopOriginCWV: [],\n    desktopLighthouse: [],\n    mobilePageCWV: [],\n    mobileOriginCWV: [],\n    mobileLighthouse: []\n  };\n\n  for (const [index, url] of urls.entries()) {\n    progress.textContent = `Processing ${index + 1} of ${urls.length}...`;\n    try {\n      const desktopData = await fetchData(url, \"desktop\", apiKey);\n      const mobileData = await fetchData(url, \"mobile\", apiKey);\n\n      results.desktopPageCWV.push({ url, metrics: parseCWVMetrics(desktopData?.loadingExperience) });\n      results.desktopOriginCWV.push({ url, metrics: parseCWVMetrics(desktopData?.originLoadingExperience) });\n      results.desktopLighthouse.push({ url, metrics: parseLighthouseMetrics(desktopData?.lighthouseResult) });\n\n      results.mobilePageCWV.push({ url, metrics: parseCWVMetrics(mobileData?.loadingExperience) });\n      results.mobileOriginCWV.push({ url, metrics: parseCWVMetrics(mobileData?.originLoadingExperience) });\n      results.mobileLighthouse.push({ url, metrics: parseLighthouseMetrics(mobileData?.lighthouseResult) });\n    } catch (error) {\n      console.error(`Error fetching data for ${url}: ${error.message}`);\n    }\n  }\n\n  progress.textContent = \"Rendering results...\";\n  renderResults(results);\n  progress.textContent = \"Completed!\";\n}\n\nasync function fetchData(url, strategy, apiKey) {\n  const response = await fetch(`https:\/\/www.googleapis.com\/pagespeedonline\/v5\/runPagespeed?url=${encodeURIComponent(url)}&strategy=${strategy}&key=${apiKey}`);\n  if (!response.ok) throw new Error(`Failed to fetch data for ${url}`);\n  return await response.json();\n}\n\nfunction parseCWVMetrics(data) {\n  const metrics = data?.metrics || {};\n  return {\n    LCP: applyColorBox(formatMetric(metrics[\"LARGEST_CONTENTFUL_PAINT_MS\"]?.percentile, \"ms\"), \"LCP\"),\n    INP: applyColorBox(formatMetric(metrics[\"INTERACTION_TO_NEXT_PAINT\"]?.percentile, \"ms\"), \"INP\"),\n    CLS: applyColorBox((metrics[\"CUMULATIVE_LAYOUT_SHIFT_SCORE\"]?.percentile \/ 100).toFixed(2), \"CLS\"),\n    FCP: applyColorBox(formatMetric(metrics[\"FIRST_CONTENTFUL_PAINT_MS\"]?.percentile, \"ms\"), \"FCP\"),\n    TTFB: applyColorBox(formatMetric(metrics[\"EXPERIMENTAL_TIME_TO_FIRST_BYTE\"]?.percentile, \"ms\"), \"TTFB\")\n  };\n}\n\nfunction parseLighthouseMetrics(data) {\n  if (!data) return {};\n  return {\n    Score: applyColorBox(Math.round(data.categories?.performance?.score * 100) || \"N\/A\", \"Score\"),\n    FCP: applyColorBox(formatMetric(data.audits?.[\"first-contentful-paint\"]?.numericValue, \"ms\"), \"FCP\"),\n    LCP: applyColorBox(formatMetric(data.audits?.[\"largest-contentful-paint\"]?.numericValue, \"ms\"), \"LCP\"),\n    CLS: applyColorBox(data.audits?.[\"cumulative-layout-shift\"]?.numericValue?.toFixed(3) || \"N\/A\", \"CLS\"),\n    TBT: applyColorBox(formatMetric(data.audits?.[\"total-blocking-time\"]?.numericValue, \"ms\"), \"TBT\"),\n    \"Speed Index\": applyColorBox(formatMetric(data.audits?.[\"speed-index\"]?.numericValue, \"ms\"), \"Speed Index\")\n  };\n}\n\nfunction formatMetric(value, unit) {\n  if (value === undefined || value === null || isNaN(value)) return \"N\/A\";\n  const numericValue = unit === \"ms\" ? value \/ 1000 : value;\n  return `${numericValue.toFixed(2)}s`;\n}\n\nconst thresholds = {\n  LCP: [2.5, 4], \/\/ Thresholds in seconds\n  INP: [0.2, 0.5], \/\/ INP in seconds\n  CLS: [0.1, 0.25], \/\/ CLS is unitless\n  FCP: [1.8, 3],\n  TTFB: [0.8, 1.8],\n  TBT: [0.2, 0.6], \/\/ TBT in seconds\n  \"Speed Index\": [3.4, 5.8],\n  Score: [90, 50] \/\/ Updated: 90+ (good), 50-89 (needs improvement), <50 (poor)\n};\n\nfunction applyColorBox(value, metricType) {\n  if (value === \"N\/A\") return `<div class=\"box neutral\">${value}<\/div>`;\n\n  const [good, moderate] = thresholds[metricType] || [Infinity, Infinity];\n  const numericValue = parseFloat(value);\n\n  let colorClass = \"poor\"; \/\/ Default to poor\n  \n  if (metricType === \"Score\") {\n    \/\/ Lighthouse score logic: good is green (90+), needs improvement is orange (50-89), poor is red (<50)\n    if (numericValue >= good) colorClass = \"good\";\n    else if (numericValue >= moderate) colorClass = \"moderate\";\n  } else {\n    \/\/ Other metrics: good is green (lower is better), needs improvement is orange, poor is red\n    if (numericValue <= good) colorClass = \"good\"; \/\/ Green for good (lower is better)\n    else if (numericValue <= moderate) colorClass = \"moderate\"; \/\/ Orange for needs improvement\n  }\n\n  return `<div class=\"box ${colorClass}\">${value}<\/div>`;\n}\n\nfunction renderResults(results) {\n  const resultsContainer = document.getElementById(\"results\");\n  resultsContainer.innerHTML = \"\";\n\n  resultsContainer.innerHTML += renderTable(\"Desktop CWV (Page)\", results.desktopPageCWV);\n  resultsContainer.innerHTML += renderTable(\"Desktop CWV (Origin)\", results.desktopOriginCWV);\n  resultsContainer.innerHTML += renderTable(\"Desktop Lighthouse\", results.desktopLighthouse);\n\n  resultsContainer.innerHTML += renderTable(\"Mobile CWV (Page)\", results.mobilePageCWV);\n  resultsContainer.innerHTML += renderTable(\"Mobile CWV (Origin)\", results.mobileOriginCWV);\n  resultsContainer.innerHTML += renderTable(\"Mobile Lighthouse\", results.mobileLighthouse);\n}\n\nfunction renderTable(title, data) {\n  if (data.length === 0) return \"\";\n\n  let table = `<h2>${title}<\/h2><div class=\"table-container\"><table><thead><tr><th>URL<\/th>`;\n  const sampleMetrics = data[0]?.metrics || {};\n  for (const metric in sampleMetrics) {\n    table += `<th>${metric}<\/th>`;\n  }\n  table += `<\/tr><\/thead><tbody>`;\n\n  for (const item of data) {\n    table += `<tr><td>${item.url}<\/td>`;\n    for (const metric in item.metrics) {\n      table += `<td>${item.metrics[metric]}<\/td>`;\n    }\n    table += `<\/tr>`;\n  }\n\n  table += `<\/tbody><\/table><\/div>`;\n  return table;\n}\n<\/script>\n\n<style>\n#cwv-form {\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n  align-items: stretch;\n}\n\n#apiKey,\n#urls {\n  font-size: 16px;\n  padding: 12px;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n#urls {\n  min-height: 150px;\n  resize: vertical;\n}\n\nbutton {\n  font-size: 18px;\n  padding: 12px;\n  background-color: #007bff;\n  color: #fff;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  transition: background-color 0.3s ease;\n}\n\nbutton:hover {\n  background-color: #0056b3;\n}\n\n#cwv-tool {\n  max-width: 800px;\n  margin: 0 auto;\n  padding: 20px;\n  background-color: #f9f9f9;\n  border-radius: 10px;\n  font-family: Arial, sans-serif;\n}\n\n.title {\n  text-align: center;\n  font-size: 24px;\n}\n\n.box {\n  padding: 5px;\n  border-radius: 4px;\n  display: inline-block;\n  width: 100%;\n}\n\n.box.good { background-color: #d4edda; color: #155724; }\n.box.moderate { background-color: #fff3cd; color: #856404; }\n.box.poor { background-color: #f8d7da; color: #721c24; }\n.box.neutral { background-color: #e2e3e5; color: #6c757d; }\n\n.table-container { overflow-x: auto; margin: 20px 0; }\ntable { border-collapse: collapse; width: 100%; }\nth, td { border: 1px solid #ddd; padding: 8px; text-align: center; }\nth { background-color: #f4f4f4; font-weight: bold; }\n<\/style>\n\n\n\n\n<p>This is an example output to show you how the speed scorecards look. You can use it as a standalone tool: <a href=\"https:\/\/ahrefs.com\/blog\/bulk-pagespeed-insights-website-speed-test\/\">website speed test<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"2560\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2025\/01\/website-speed-test-scaled.jpg\" alt=\"output of the bulk page speed test tool showing cwv and lighthouse desktop and mobile metrics\" class=\"wp-image-184636\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2025\/01\/website-speed-test-scaled.jpg 548w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2025\/01\/website-speed-test-91x425.jpg 91w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2025\/01\/website-speed-test-329x1536.jpg 329w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\"><\/figure>\n\n\n\n<p><\/p>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"How to improve Core Web Vitals\" data-section=\"improve-cwvs\">\n<h2>How to improve Core Web Vitals<\/h2>\n<\/div><\/div>\n\n\n\n<p>Each metric is going to take different optimizations in order to improve your overall Core Web Vitals.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to improve LCP<\/h3>\n\n\n\n<p>As we saw in PageSpeed Insights, there are a lot of issues related to LCP. This makes LCP the hardest metric to improve. We cover a lot more details, including how to fix the issues in our <a href=\"https:\/\/ahrefs.com\/blog\/largest-contentful-paint-lcp\/\">Largest Contentful Paint<\/a> article.<\/p>\n\n\n\n<p>Some of the ways you can improve LCP include:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Prioritize loading of resources<\/li>\n\n\n\n<li>Make files smaller<\/li>\n\n\n\n<li>Serve files closer to&nbsp;users<\/li>\n\n\n\n<li>Host resources on the same server<\/li>\n\n\n\n<li>Use caching<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">How to improve CLS<\/h3>\n\n\n\n<p>To optimize CLS you\u2019re going to be working on issues related to images, fonts or, possibly, injected content. We cover a lot more details, including how to fix the issues in our <a href=\"https:\/\/ahrefs.com\/blog\/cumulative-layout-shift-cls\/\">Cumulative Layout Shift<\/a> article.<\/p>\n\n\n\n<p>Some of the ways you can improve CLS include:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Reserve space for images, videos, iframes<\/li>\n\n\n\n<li>Optimize fonts<\/li>\n\n\n\n<li>Use animations that don\u2019t trigger layout changes<\/li>\n\n\n\n<li>Make sure your pages are eligible for bfcache<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">How to improve FID<\/h3>\n\n\n\n<p>Most pages pass FID checks. But if you need to work on FID, our article on <a href=\"https:\/\/ahrefs.com\/blog\/first-input-delay-fid\/\">First Input Delay<\/a> has more in-depth information including how to fix issues.<\/p>\n\n\n\n<p>Some of the ways you can improve FID include:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Reduce the amount of JavaScript<\/li>\n\n\n\n<li>Load JavaScript later if possible<\/li>\n\n\n\n<li>Break up long&nbsp;tasks<\/li>\n\n\n\n<li>Use web workers<\/li>\n\n\n\n<li>Use prerendering or server-side rendering (SSR)<\/li>\n<\/ol>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"Are Core Web Vitals important for SEO?\" data-section=\"5-cwv-importance\">\n<h2>Are Core Web Vitals important for&nbsp;SEO?<\/h2>\n<\/div><\/div>\n\n\n\n<p>Core Web Vitals are not a significant ranking factor. Google has over 200 <a href=\"https:\/\/ahrefs.com\/blog\/google-ranking-factors\/\">ranking factors<\/a>, many of which don\u2019t carry much weight. When talking about Core Web Vitals, Google reps have referred to these as tiny ranking factors or even tiebreakers. I don\u2019t expect much, if any, improvement in rankings from improving Core Web Vitals. Here\u2019s what Google\u2019s Gary Illyes had to say about them at Pubcon in September 2023.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I don\u2019t think most sites will see a great benefit from working on Core Web Vitals (paraphrased a bit) <a href=\"https:\/\/twitter.com\/methode?ref_src=twsrc%5Etfw\">@methode<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/pubcon?src=hash&amp;ref_src=twsrc%5Etfw\">#pubcon<\/a><\/p>\u2014 Patrick Stox (@patrickstox) <a href=\"https:\/\/twitter.com\/patrickstox\/status\/1704964442692153512?ref_src=twsrc%5Etfw\">September 21,&nbsp;2023<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p>Still, they are a factor, and this tweet from Google\u2019s John Mueller shows how the boost may&nbsp;work.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1184\" height=\"1000\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/Screenshot-2024-03-18-at-12.31.02.png\" alt=\"John Mueller showing how the CWV boost may work\" class=\"wp-image-172959\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/Screenshot-2024-03-18-at-12.31.02.png 1184w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/Screenshot-2024-03-18-at-12.31.02-503x425.png 503w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/Screenshot-2024-03-18-at-12.31.02-768x649.png 768w\" sizes=\"auto, (max-width: 1184px) 100vw, 1184px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>There have been ranking factors targeting speed metrics for many years. So I wasn\u2019t expecting much, if any, impact to be visible when the mobile page experience update rolled out. Unfortunately, there were also a couple of <a href=\"https:\/\/ahrefs.com\/google-algorithm-updates\">Google core updates<\/a> during the time frame for the Page Experience update, which makes determining the impact too messy to draw a conclusion.<\/p>\n\n\n\n<p>There are a couple of studies that found some positive correlation between passing Core Web Vitals and better rankings, but I personally look at these results with skepticism. It\u2019s like saying a site that focuses on SEO tends to rank better. If a site is already working on Core Web Vitals, it likely has done a lot of other things right as well. And people did work on them, as you can see in the chart below from <a href=\"https:\/\/ahrefs.com\/blog\/core-web-vitals-study\">our data study<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1559\" src=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/5-good-fid-lcp-cls.png\" alt=\"Graph showing percentage of good FID, LCP, and CLS over time\" class=\"wp-image-139042\" srcset=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/5-good-fid-lcp-cls.png 1600w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/5-good-fid-lcp-cls-436x425.png 436w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/5-good-fid-lcp-cls-768x748.png 768w, https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2022\/02\/5-good-fid-lcp-cls-1536x1497.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"><\/figure>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<div style=\"text-align: center;\">&nbsp;<\/div>\n\n\n<div class=\"post-nav-link clearfix\" id=\"section1\"><a class=\"subhead-anchor\" data-tip=\"tooltip__copielink\" rel=\"#section1\"><svg width=\"19\" height=\"19\" viewBox=\"0 0 14 14\" style><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M0 0h14v14H0z\" \/><path d=\"M7.45 9.887l-1.62 1.621c-.92.92-2.418.92-3.338 0a2.364 2.364 0 0 1 0-3.339l1.62-1.62-1.273-1.272-1.62 1.62a4.161 4.161 0 1 0 5.885 5.884l1.62-1.62L7.45 9.886zM5.527 5.135L7.17 3.492c.92-.92 2.418-.92 3.339 0 .92.92.92 2.418 0 3.339L8.866 8.473l1.272 1.273 1.644-1.643A4.161 4.161 0 1 0 5.897 2.22L4.254 3.863l1.272 1.272zm-.66 3.998a.749.749 0 0 1 0-1.06l2.208-2.206a.749.749 0 1 1 1.06 1.06L5.928 9.133a.75.75 0 0 1-1.061 0z\" style \/><\/g><\/svg><\/a><div class=\"link-text\" data-anchor=\"Quick facts about Core Web Vitals\" data-section=\"6-quick-facts\">\n<h2>Quick facts about Core Web Vitals<\/h2>\n<\/div><\/div>\n\n\n\n<p><strong>Fact 1: <\/strong>The metrics are split between desktop and mobile. Mobile signals are used for mobile rankings, and desktop signals are used for desktop rankings.<\/p>\n\n\n\n<p><strong>Fact 2: <\/strong>The data comes from the Chrome User Experience Report (CrUX), which records data from opted-in Chrome users. The metrics are assessed at the 75th percentile of users. So if 70% of your users are in the \u201cgood\u201d category and 5% are in the \u201cneed improvement\u201d category, then your page will still be judged as \u201cneed improvement.\u201d<\/p>\n\n\n\n<p><strong>Fact 3: <\/strong>The metrics are assessed for each page. But if there isn\u2019t enough data, Google Webmaster Trends Analyst John Mueller&nbsp;<a href=\"https:\/\/www.searchenginejournal.com\/core-web-vitals-noindex\/395578\/\">states<\/a>&nbsp;that signals from sections of a site or the overall site may be used.&nbsp;In our <a href=\"https:\/\/ahrefs.com\/blog\/core-web-vitals-study\">Core Web Vitals data study<\/a>, we looked at over 42 million pages and found that only 11.4% of the pages had metrics associated with&nbsp;them.<\/p>\n\n\n\n<p><strong>Fact 4: <\/strong>With the addition of these new metrics, <a href=\"https:\/\/amp.dev\/\">Accelerated Mobile Pages (<\/a><a href=\"https:\/\/amp.dev\/\">AMP<\/a><a href=\"https:\/\/amp.dev\/\">)<\/a>&nbsp;was removed as a requirement from the Top Stories feature on mobile. Since new stories won\u2019t actually have data on the speed metrics, it\u2019s likely the metrics from a larger category of pages or even the entire domain may be&nbsp;used.<\/p>\n\n\n\n<p><strong>Fact 5: <\/strong>Single Page Applications don\u2019t measure a couple of metrics, FID and LCP, through page transitions. There are a couple of proposed changes, including the <a href=\"https:\/\/web.dev\/vitals-spa-faq\/\">App History API<\/a>&nbsp;and potentially a change in the metric used to measure interactivity that would be called \u201c<a href=\"https:\/\/www.google.com\/url?q=https:\/\/web.dev\/better-responsiveness-metric\/&amp;sa=D&amp;source=docs&amp;ust=1642111457940072&amp;usg=AOvVaw3DCFkjOIvHBLfzkx7eODUG\">Responsiveness<\/a>.\u201d<\/p>\n\n\n\n<p><strong>Fact 6: <\/strong>The metrics may change over time, and the thresholds may as well. Google has already changed the metrics used for measuring speed in its tools over the years, as well as its thresholds for what is considered fast or&nbsp;not.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\"><strong>Fact 7: <\/strong>There are additional Web Vitals that serve as proxy measures or supplemental metrics but are not used in the ranking calculations. The Web Vitals metrics for visual load include Time to First Byte (TTFB) and First Contentful Paint (FCP). Total Blocking Time (TBT) and Time to Interactive (TTI) help to measure interactivity.<\/span><\/p>\n\n\n\n<p>Core Web Vitals have already changed, and there are more proposed changes to the metrics. I wouldn\u2019t be surprised if page size was added. You can pass the current metrics by prioritizing assets and still have an extremely large page. It\u2019s a pretty big miss, in my opinion.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final thoughts<\/h2>\n\n\n\n<p>I don\u2019t think Core Web Vitals have much impact on SEO and, unless you are extremely slow, I generally won\u2019t prioritize fixing them. If you want to argue for Core Web Vitals improvements, I think that\u2019s hard to do for&nbsp;SEO.<\/p>\n\n\n\n<p>However, you can make a case for it for user experience. Improvements should help you record more data in your analytics, which \u201cfeels\u201d like an increase. You may also be able to make a case for more conversions, as there are a lot of studies out there that show this (but it also may be a result of recording more&nbsp;data).<\/p>\n\n\n\n<p>Here\u2019s another key point: work with your developers; they are the experts here. Page speed can be extremely complex. If you\u2019re on your own, you may need to rely on a plugin or service (e.g., WP Rocket or Autoptimize) to handle this.<\/p>\n\n\n\n<p>Things will get easier as new technologies are rolled out and many of the platforms like your CMS, your CDN, or even your browser take on some of the optimization tasks. My prediction is that within a few years, most sites won\u2019t even have to worry much because most of the optimizations will already be handled.<\/p>\n\n\n\n<p>Many of the platforms are already rolling out or working on things that will help&nbsp;you.<\/p>\n\n\n\n<p>Already, WordPress is preloading the first image and is putting together a team to work on Core Web Vitals. Cloudflare has already rolled out many things that will make your site faster, such as Early Hints, Signed Exchanges, and HTTP\/3. I expect this trend to continue until site owners don\u2019t even have to worry about working on this anymore.<\/p>\n\n\n\n<p>As always, message me <a href=\"https:\/\/twitter.com\/patrickstox\">on Twitter<\/a>&nbsp;if you have any questions.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The data comes from the Chrome User Experience Report (CrUX) which contains field data of Chrome users who opted to share their&nbsp;data. Mobile page experience and the included Core Web Vital metrics have&nbsp;officially been used for ranking pages since May<span class=\"ellipsis\">\u2026<\/span><\/p>\n<div class=\"read-more\">Read more \u203a<\/div>\n<p><!-- end of .read-more --><\/p>\n","protected":false},"author":150,"featured_media":132753,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[329],"tags":[],"coauthors":[377],"class_list":["post-139060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-seo","odd"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What Are Core Web Vitals (CWVs) &amp; How To Improve Them<\/title>\n<meta name=\"description\" content=\"What are Core Web Vitals, how to measure and improve them, and do they matter for SEO?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What Are Core Web Vitals (CWVs) &amp; How To Improve Them\" \/>\n<meta property=\"og:description\" content=\"Improve them.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\" \/>\n<meta property=\"og:site_name\" content=\"SEO Blog by Ahrefs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Ahrefs\/\" \/>\n<meta property=\"article:author\" content=\"patrickstox\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-23T07:00:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-22T23:30:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"990\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Patrick Stox\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Improve them.\" \/>\n<meta name=\"twitter:creator\" content=\"@patrickstox\" \/>\n<meta name=\"twitter:site\" content=\"@ahrefs\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\"},\"author\":{\"name\":\"Patrick Stox\",\"@id\":\"https:\/\/ahrefs.com\/blog\/#\/schema\/person\/14bf754248f3c561786477e4e5fd2067\"},\"headline\":\"What Are Core Web Vitals (CWVs) &amp; How To Improve Them\",\"datePublished\":\"2022-02-23T07:00:40+00:00\",\"dateModified\":\"2025-01-22T23:30:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\"},\"wordCount\":3136,\"publisher\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png\",\"articleSection\":[\"Technical SEO\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\",\"url\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\",\"name\":\"What Are Core Web Vitals (CWVs) &amp; How To Improve Them\",\"isPartOf\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png\",\"datePublished\":\"2022-02-23T07:00:40+00:00\",\"dateModified\":\"2025-01-22T23:30:38+00:00\",\"description\":\"What are Core Web Vitals, how to measure and improve them, and do they matter for SEO?\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage\",\"url\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png\",\"contentUrl\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png\",\"width\":1920,\"height\":990,\"caption\":\"core web vitals\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ahrefs.com\/blog\/#website\",\"url\":\"https:\/\/ahrefs.com\/blog\/\",\"name\":\"SEO Blog by Ahrefs\",\"description\":\"Link Building Strategies &amp; SEO Tips\",\"publisher\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ahrefs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ahrefs.com\/blog\/#organization\",\"name\":\"Ahrefs\",\"url\":\"https:\/\/ahrefs.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ahrefs.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2023\/06\/ahrefs-logo.png\",\"contentUrl\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2023\/06\/ahrefs-logo.png\",\"width\":2048,\"height\":768,\"caption\":\"Ahrefs\"},\"image\":{\"@id\":\"https:\/\/ahrefs.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Ahrefs\/\",\"https:\/\/x.com\/ahrefs\",\"https:\/\/www.linkedin.com\/company\/ahrefs\/\",\"https:\/\/www.youtube.com\/c\/ahrefscom\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ahrefs.com\/blog\/#\/schema\/person\/14bf754248f3c561786477e4e5fd2067\",\"name\":\"Patrick Stox\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2019\/11\/Screenshot-2019-11-06-at-00.57.29.pngbade1fd182f70b6825c334271c12533e\",\"url\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2019\/11\/Screenshot-2019-11-06-at-00.57.29.png\",\"contentUrl\":\"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2019\/11\/Screenshot-2019-11-06-at-00.57.29.png\",\"caption\":\"Patrick Stox\"},\"description\":\"Patrick Stox is a Product Advisor, Technical SEO, &amp; Brand Ambassador at Ahrefs. He was the lead author for the SEO chapter of the 2021 Web Almanac and a reviewer for the 2022 SEO chapter. He also co-wrote the SEO Book For Beginners by Ahrefs and was the Technical Review Editor for The Art of SEO 4th Edition. He\u2019s an organizer for the Triangle SEO Meetup, the Tech SEO Connect conference, he runs a Technical SEO Slack group, and is a moderator for \/r\/TechSEO on Reddit.\",\"sameAs\":[\"https:\/\/patrickstox.com\/\",\"patrickstox\",\"https:\/\/x.com\/patrickstox\"],\"url\":\"https:\/\/ahrefs.com\/blog\/author\/patrick-stox\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What Are Core Web Vitals (CWVs) &amp; How To Improve Them","description":"What are Core Web Vitals, how to measure and improve them, and do they matter for SEO?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/","og_locale":"en_US","og_type":"article","og_title":"What Are Core Web Vitals (CWVs) &amp; How To Improve Them","og_description":"Improve them.","og_url":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/","og_site_name":"SEO Blog by Ahrefs","article_publisher":"https:\/\/www.facebook.com\/Ahrefs\/","article_author":"patrickstox","article_published_time":"2022-02-23T07:00:40+00:00","article_modified_time":"2025-01-22T23:30:38+00:00","og_image":[{"width":1920,"height":990,"url":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png","type":"image\/png"}],"author":"Patrick Stox","twitter_card":"summary_large_image","twitter_description":"Improve them.","twitter_creator":"@patrickstox","twitter_site":"@ahrefs","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#article","isPartOf":{"@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/"},"author":{"name":"Patrick Stox","@id":"https:\/\/ahrefs.com\/blog\/#\/schema\/person\/14bf754248f3c561786477e4e5fd2067"},"headline":"What Are Core Web Vitals (CWVs) &amp; How To Improve Them","datePublished":"2022-02-23T07:00:40+00:00","dateModified":"2025-01-22T23:30:38+00:00","mainEntityOfPage":{"@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/"},"wordCount":3136,"publisher":{"@id":"https:\/\/ahrefs.com\/blog\/#organization"},"image":{"@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage"},"thumbnailUrl":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png","articleSection":["Technical SEO"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/","url":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/","name":"What Are Core Web Vitals (CWVs) &amp; How To Improve Them","isPartOf":{"@id":"https:\/\/ahrefs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage"},"image":{"@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage"},"thumbnailUrl":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png","datePublished":"2022-02-23T07:00:40+00:00","dateModified":"2025-01-22T23:30:38+00:00","description":"What are Core Web Vitals, how to measure and improve them, and do they matter for SEO?","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ahrefs.com\/blog\/core-web-vitals\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ahrefs.com\/blog\/core-web-vitals\/#primaryimage","url":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png","contentUrl":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2021\/04\/fb-core-web-vitals.png","width":1920,"height":990,"caption":"core web vitals"},{"@type":"WebSite","@id":"https:\/\/ahrefs.com\/blog\/#website","url":"https:\/\/ahrefs.com\/blog\/","name":"SEO Blog by Ahrefs","description":"Link Building Strategies &amp; SEO Tips","publisher":{"@id":"https:\/\/ahrefs.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ahrefs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ahrefs.com\/blog\/#organization","name":"Ahrefs","url":"https:\/\/ahrefs.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ahrefs.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2023\/06\/ahrefs-logo.png","contentUrl":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2023\/06\/ahrefs-logo.png","width":2048,"height":768,"caption":"Ahrefs"},"image":{"@id":"https:\/\/ahrefs.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Ahrefs\/","https:\/\/x.com\/ahrefs","https:\/\/www.linkedin.com\/company\/ahrefs\/","https:\/\/www.youtube.com\/c\/ahrefscom"]},{"@type":"Person","@id":"https:\/\/ahrefs.com\/blog\/#\/schema\/person\/14bf754248f3c561786477e4e5fd2067","name":"Patrick Stox","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2019\/11\/Screenshot-2019-11-06-at-00.57.29.pngbade1fd182f70b6825c334271c12533e","url":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2019\/11\/Screenshot-2019-11-06-at-00.57.29.png","contentUrl":"https:\/\/ahrefs.com\/blog\/wp-content\/uploads\/2019\/11\/Screenshot-2019-11-06-at-00.57.29.png","caption":"Patrick Stox"},"description":"Patrick Stox is a Product Advisor, Technical SEO, &amp; Brand Ambassador at Ahrefs. He was the lead author for the SEO chapter of the 2021 Web Almanac and a reviewer for the 2022 SEO chapter. He also co-wrote the SEO Book For Beginners by Ahrefs and was the Technical Review Editor for The Art of SEO 4th Edition. He\u2019s an organizer for the Triangle SEO Meetup, the Tech SEO Connect conference, he runs a Technical SEO Slack group, and is a moderator for \/r\/TechSEO on Reddit.","sameAs":["https:\/\/patrickstox.com\/","patrickstox","https:\/\/x.com\/patrickstox"],"url":"https:\/\/ahrefs.com\/blog\/author\/patrick-stox\/"}]}},"_links":{"self":[{"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/posts\/139060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/users\/150"}],"replies":[{"embeddable":true,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/comments?post=139060"}],"version-history":[{"count":0,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/posts\/139060\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/media\/132753"}],"wp:attachment":[{"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/media?parent=139060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/categories?post=139060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/tags?post=139060"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/ahrefs.com\/blog\/wp-json\/wp\/v2\/coauthors?post=139060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}