{"id":13,"date":"2026-02-10T14:40:09","date_gmt":"2026-02-10T14:40:09","guid":{"rendered":"https:\/\/www.webfort.co.uk\/blog\/?p=13"},"modified":"2026-02-13T21:11:27","modified_gmt":"2026-02-13T21:11:27","slug":"core-web-vitals-explained-what-they-are-and-how-to-improve-them","status":"publish","type":"post","link":"https:\/\/www.webfort.co.uk\/blog\/core-web-vitals-explained-what-they-are-and-how-to-improve-them\/","title":{"rendered":"Core Web Vitals Explained: What They Are and How to Improve Them"},"content":{"rendered":"\n<p>If you&#8217;ve ever run your site through Google PageSpeed Insights, you&#8217;ll have seen three metrics front and centre: <strong>Largest Contentful Paint (LCP)<\/strong>, <strong>Interaction to Next Paint (INP)<\/strong>, and <strong>Cumulative Layout Shift (CLS)<\/strong>. Together, these are known as <strong>Core Web Vitals<\/strong> \u2014 and they directly influence how Google ranks your website.<\/p>\n\n\n\n<p>Core Web Vitals aren&#8217;t just abstract numbers for developers to obsess over. They measure real things your visitors experience: how fast your page appears, how quickly it responds when they tap or click, and whether the layout jumps around while it loads.<\/p>\n\n\n\n<p>This guide explains each metric in plain English, shows you how to diagnose problems, and walks you through practical fixes you can make today.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">What&#8217;s in This Guide<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"#what-are-core-web-vitals\">What Are Core Web Vitals?<\/a><\/li>\n<li><a href=\"#how-to-check\">How to Check Your Core Web Vitals<\/a><\/li>\n<li><a href=\"#lcp\">Largest Contentful Paint (LCP)<\/a><\/li>\n<li><a href=\"#inp\">Interaction to Next Paint (INP)<\/a><\/li>\n<li><a href=\"#cls\">Cumulative Layout Shift (CLS)<\/a><\/li>\n<li><a href=\"#putting-it-together\">Putting It All Together<\/a><\/li>\n<li><a href=\"#quick-reference\">Quick Reference: Targets at a Glance<\/a><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-are-core-web-vitals\">What Are Core Web Vitals?<\/h2>\n\n\n\n<p>Core Web Vitals are a set of three performance metrics that Google uses as part of its ranking algorithm. They were introduced as a ranking signal in 2021 and have been refined since. Each metric focuses on a different aspect of the user experience:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LCP (Largest Contentful Paint)<\/strong> \u2014 measures <em>loading performance<\/em>. How quickly does the main content of the page become visible?<\/li>\n<li><strong>INP (Interaction to Next Paint)<\/strong> \u2014 measures <em>interactivity<\/em>. When a user clicks, taps, or presses a key, how quickly does the page respond visually?<\/li>\n<li><strong>CLS (Cumulative Layout Shift)<\/strong> \u2014 measures <em>visual stability<\/em>. Does the page layout shift unexpectedly while it&#8217;s loading?<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>To pass Core Web Vitals, your site needs to hit &#8220;Good&#8221; on all three metrics for at least <strong>75% of page loads<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-check\">How to Check Your Core Web Vitals<\/h2>\n\n\n\n<p>Before you start fixing anything, you need to know where you stand. There are two types of data to look at:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Field data (real-user data)<\/strong> \u2014 collected from actual visitors to your site over 28 days. This is what Google uses for ranking. You&#8217;ll find it in <a href=\"https:\/\/search.google.com\/search-console\/\" rel=\"nofollow noopener\" target=\"_blank\">Google Search Console<\/a> under the Core Web Vitals report, or at the top of a <a href=\"https:\/\/pagespeed.web.dev\/\" rel=\"nofollow noopener\" target=\"_blank\">PageSpeed Insights<\/a> report if your site has enough traffic.<\/li>\n<li><strong>Lab data (simulated data)<\/strong> \u2014 generated by tools that load your page in a controlled environment. Useful for diagnosing specific issues. You&#8217;ll find this in the lower section of a PageSpeed Insights report, in <a href=\"https:\/\/developer.chrome.com\/docs\/lighthouse\/\" rel=\"nofollow noopener\" target=\"_blank\">Lighthouse<\/a> (built into Chrome DevTools), and in <a href=\"https:\/\/gtmetrix.com\/\" rel=\"nofollow noopener\" target=\"_blank\">GTmetrix<\/a>.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Start here:<\/strong> Paste your URL into <a href=\"https:\/\/pagespeed.web.dev\/\" rel=\"nofollow noopener\" target=\"_blank\">PageSpeed Insights<\/a> \u2014 you&#8217;ll get both field and lab data in one place, along with specific recommendations.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"lcp\">1. Largest Contentful Paint (LCP)<\/h2>\n\n\n\n<p>LCP measures how long it takes for the largest visible element on the page to finish rendering. This is usually a hero image, a featured image, or a large block of text. It&#8217;s the moment your visitor feels like the page has &#8220;loaded.&#8221;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Targets<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Good:<\/strong> 2.5 seconds or less<\/li>\n<li><strong>Needs Improvement:<\/strong> 2.5\u20134.0 seconds<\/li>\n<li><strong>Poor:<\/strong> more than 4.0 seconds<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What Causes Poor LCP<\/h3>\n\n\n\n<p>LCP is usually slow because of one or more of these issues:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Large, unoptimised images.<\/strong> A 3MB hero image will take a long time to download, no matter how fast your server is.<\/li>\n<li><strong>Render-blocking resources.<\/strong> CSS and JavaScript files in the <code>&lt;head&gt;<\/code> of your page that must be downloaded and parsed before anything can be displayed.<\/li>\n<li><strong>Slow server response time.<\/strong> If your server takes a long time to respond to the initial request, everything else is delayed.<\/li>\n<li><strong>Client-side rendering.<\/strong> If your content is built entirely with JavaScript after the page loads (common with some page builders), the browser has to download, parse, and execute the script before it can even start rendering content.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to Improve LCP<\/h3>\n\n\n\n<p><strong>Optimise your LCP image:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Identify your LCP element using PageSpeed Insights \u2014 it will tell you exactly which element is the largest contentful paint. More often than not, it&#8217;s an image.<\/li>\n<li>Resize the image to the actual display size. If it&#8217;s shown at 800px wide, don&#8217;t upload a 3000px original.<\/li>\n<li>Use modern formats like <strong>WebP<\/strong> or <strong>AVIF<\/strong>. These offer dramatically better compression than JPEG or PNG. Plugins like <strong>ShortPixel<\/strong> or <strong>Imagify<\/strong> can convert images automatically.<\/li>\n<li>Add <code>fetchpriority=\"high\"<\/code> to your LCP image so the browser knows to prioritise downloading it.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Warning:<\/strong> Don&#8217;t lazy-load your LCP image. Lazy loading tells the browser to <em>delay<\/em> loading an image until it&#8217;s near the viewport \u2014 the exact opposite of what you want for the first thing visitors see. WordPress 6.3+ excludes the first content image from lazy loading by default, but some themes or plugins may override this.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Eliminate render-blocking resources:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defer non-critical JavaScript by adding the <code>defer<\/code> attribute. Many performance plugins can do this automatically.<\/li>\n<li>Inline critical CSS (the styles needed to render above-the-fold content) and defer the rest. Plugins like <strong>Autoptimize<\/strong> or <strong>LiteSpeed Cache<\/strong> have options for this.<\/li>\n<li>Remove unused CSS and JavaScript. Tools like Chrome DevTools&#8217; Coverage tab can show you how much of each file is actually used on a given page.<\/li>\n<\/ul>\n\n\n\n<p><strong>Improve server response time:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable page caching so your server delivers a pre-built HTML file instead of running PHP and database queries on every request. <strong>WP Super Cache<\/strong>, <strong>W3 Total Cache<\/strong>, or <strong>LiteSpeed Cache<\/strong> all do this well.<\/li>\n<li>Make sure you&#8217;re running a modern version of PHP. PHP 8.2+ is significantly faster than older versions \u2014 you can usually switch this from your hosting control panel.<\/li>\n<li>Use <strong>OPcache<\/strong> to cache compiled PHP bytecode, and consider <strong>Redis<\/strong> or <strong>Memcached<\/strong> for object caching if your hosting plan supports them.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Key takeaway:<\/strong> If your server response time (Time to First Byte) is consistently over 600ms even with caching, your hosting may be the bottleneck. At <strong>Webfort<\/strong>, our servers are built for speed with fast NVMe storage, OPcache, and server-level optimisations that give your site a solid foundation.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"inp\">2. Interaction to Next Paint (INP)<\/h2>\n\n\n\n<p>INP measures how responsive your page is to user interactions. Every time a visitor clicks a button, taps a link, or types in a form field, the browser needs to process that interaction and update the display.<\/p>\n\n\n\n<p>INP captures the delay between the interaction and the next visual update \u2014 across <em>all<\/em> interactions during the visit \u2014 and reports a value representative of the worst cases.<\/p>\n\n\n\n<p>INP replaced <strong>First Input Delay (FID)<\/strong> as a Core Web Vital in March 2024. While FID only measured the delay of the <em>first<\/em> interaction, INP considers responsiveness throughout the entire page visit, making it a much better reflection of real user experience.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Targets<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Good:<\/strong> 200 milliseconds or less<\/li>\n<li><strong>Needs Improvement:<\/strong> 200\u2013500 milliseconds<\/li>\n<li><strong>Poor:<\/strong> more than 500 milliseconds<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What Causes Poor INP<\/h3>\n\n\n\n<p>INP problems are almost always caused by JavaScript blocking the browser&#8217;s main thread. When the browser is busy executing a long-running script, it can&#8217;t respond to user input \u2014 the page feels frozen or sluggish.<\/p>\n\n\n\n<p>Common culprits include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Heavy third-party scripts.<\/strong> Analytics trackers, ad scripts, chat widgets, social media embeds, and consent management platforms can all add significant JavaScript overhead.<\/li>\n<li><strong>Bloated page builders.<\/strong> Some visual page builders generate large amounts of JavaScript to handle layout and interactivity on the front end.<\/li>\n<li><strong>Too many plugins loading scripts.<\/strong> Each plugin that adds front-end JavaScript increases the total work the browser has to do.<\/li>\n<li><strong>Large DOM size.<\/strong> Pages with thousands of HTML elements take longer for the browser to update after an interaction.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to Improve INP<\/h3>\n\n\n\n<p><strong>Reduce and optimise JavaScript:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Audit your plugins.<\/strong> Use <a href=\"https:\/\/querymonitor.com\/\" rel=\"nofollow noopener\" target=\"_blank\">Query Monitor<\/a> to see which plugins are loading JavaScript on the front end. Deactivate or replace any that add scripts you don&#8217;t need.<\/li>\n<li><strong>Defer non-essential scripts.<\/strong> Third-party scripts like analytics, chat widgets, and social embeds don&#8217;t need to load immediately. Plugins like <strong>Flying Scripts<\/strong> or <strong>Perfmatters<\/strong> can delay JavaScript execution until the user scrolls, clicks, or moves the mouse.<\/li>\n<li><strong>Minify JavaScript.<\/strong> Remove unnecessary whitespace and comments to reduce file sizes. <strong>Autoptimize<\/strong> or your caching plugin can handle this.<\/li>\n<li><strong>Avoid excessive inline JavaScript.<\/strong> Some themes and plugins inject large blocks of inline script into every page. Check your page source and look for optimisation options in plugin settings.<\/li>\n<\/ul>\n\n\n\n<p><strong>Reduce DOM complexity:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep your page structure simple. Avoid deeply nested layouts with dozens of wrapper divs.<\/li>\n<li>If you use a page builder, keep sections and elements to what&#8217;s actually needed. Every element adds to the DOM.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Tip:<\/strong> Google recommends keeping the DOM under 1,400 elements. Check your count in Chrome DevTools by running <code>document.querySelectorAll('*').length<\/code> in the Console tab.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Break up long tasks:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you&#8217;re writing custom JavaScript, avoid synchronous operations that block the main thread for more than 50ms. Use <code>requestAnimationFrame<\/code> or <code>setTimeout<\/code> to break work into smaller chunks.<\/li>\n<li>For most WordPress sites, reducing the total amount of JavaScript is more practical and effective than refactoring how it runs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cls\">3. Cumulative Layout Shift (CLS)<\/h2>\n\n\n\n<p>CLS measures how much the visible content on your page shifts around unexpectedly during loading.<\/p>\n\n\n\n<p>You&#8217;ve probably experienced this yourself \u2014 you start reading an article, an image loads above and pushes the text down, or you&#8217;re about to tap a link and a banner appears, causing you to click the wrong thing. That&#8217;s layout shift, and it&#8217;s infuriating.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Targets<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Good:<\/strong> 0.1 or less<\/li>\n<li><strong>Needs Improvement:<\/strong> 0.1\u20130.25<\/li>\n<li><strong>Poor:<\/strong> more than 0.25<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What Causes Poor CLS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Images and videos without dimensions.<\/strong> If the browser doesn&#8217;t know how big an image will be before it loads, it initially renders the page without it and then shifts everything when the image appears.<\/li>\n<li><strong>Ads, embeds, and iframes without reserved space.<\/strong> Third-party content that injects itself into the page after load will push everything around it.<\/li>\n<li><strong>Web fonts causing a flash of unstyled text (FOUT).<\/strong> When a custom font loads and replaces the fallback font, the different sizing can cause text to reflow and shift surrounding elements.<\/li>\n<li><strong>Dynamically injected content.<\/strong> Cookie consent banners, newsletter popups, and notification bars that push page content down instead of overlaying it.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to Improve CLS<\/h3>\n\n\n\n<p><strong>Always set image and video dimensions:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Include <code>width<\/code> and <code>height<\/code> attributes on all <code>&lt;img&gt;<\/code> and <code>&lt;video&gt;<\/code> elements. This allows the browser to reserve the correct amount of space before the file loads.<\/li>\n<li>WordPress automatically adds width and height attributes to images inserted through the media library, but check that your theme&#8217;s CSS isn&#8217;t overriding this with something like <code>height: auto<\/code> without a corresponding <code>aspect-ratio<\/code> property.<\/li>\n<li>For responsive images, use CSS <code>aspect-ratio<\/code> or a container with percentage-based padding to maintain the correct proportions across screen sizes.<\/li>\n<\/ul>\n\n\n\n<p><strong>Reserve space for ads and embeds:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you use ads, give the ad container a fixed minimum height matching the expected ad size. An empty space is far better than a layout shift when the ad loads.<\/li>\n<li>For embeds (YouTube, Twitter, etc.), use a placeholder or facade with fixed dimensions. Plugins like <strong>WP YouTube Lyte<\/strong> and <strong>Lite YouTube Embed<\/strong> replace YouTube embeds with a lightweight preview image until the user clicks play.<\/li>\n<\/ul>\n\n\n\n<p><strong>Handle web fonts properly:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <code>font-display: swap<\/code> in your <code>@font-face<\/code> declarations. This tells the browser to show the fallback font immediately and swap in the custom font when it&#8217;s ready.<\/li>\n<li>Better still, use <code>font-display: optional<\/code> if you&#8217;re willing to let the browser skip the custom font entirely on slow connections. This eliminates both FOIT and FOUT.<\/li>\n<li>Preload your most important font files using <code>&lt;link rel=\"preload\" as=\"font\" type=\"font\/woff2\" crossorigin&gt;<\/code> so the browser starts downloading them early.<\/li>\n<li>Self-host your fonts instead of loading them from Google Fonts. This removes the extra DNS lookup and connection overhead. Plugins like <strong>OMGF<\/strong> automate this.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Key takeaway:<\/strong> Cookie consent banners and notification bars should <strong>overlay<\/strong> the page content (using fixed or sticky positioning), not push it down. Check your consent plugin&#8217;s settings \u2014 most offer this as an option.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"putting-it-together\">Putting It All Together<\/h2>\n\n\n\n<p>Improving Core Web Vitals doesn&#8217;t have to be overwhelming. Here&#8217;s a practical approach:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Benchmark first.<\/strong> Run your key pages through <a href=\"https:\/\/pagespeed.web.dev\/\" rel=\"nofollow noopener\" target=\"_blank\">PageSpeed Insights<\/a> and note your LCP, INP, and CLS scores. Check <a href=\"https:\/\/search.google.com\/search-console\/\" rel=\"nofollow noopener\" target=\"_blank\">Google Search Console<\/a> for field data showing which URLs have issues.<\/li>\n<li><strong>Fix the biggest problems first.<\/strong> PageSpeed Insights tells you exactly which issues are costing you the most. Start there.<\/li>\n<li><strong>Tackle one metric at a time.<\/strong> Get LCP under control first (it&#8217;s usually the most impactful), then address CLS (often the easiest to fix), and finally INP.<\/li>\n<li><strong>Test after every change.<\/strong> Make one change, measure the result. This way you know what&#8217;s working and can catch any regressions early.<\/li>\n<li><strong>Monitor over time.<\/strong> Core Web Vitals are based on real-user data collected over 28 days. Improvements won&#8217;t show up in Google&#8217;s reports immediately, but lab data will confirm you&#8217;re on the right track.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quick-reference\">Quick Reference: Targets at a Glance<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Metric<\/th><th>What It Measures<\/th><th>Good<\/th><th>Poor<\/th><\/tr><\/thead><tbody><tr><td>LCP<\/td><td>Loading speed<\/td><td>\u2264 2.5s<\/td><td>&gt; 4.0s<\/td><\/tr><tr><td>INP<\/td><td>Responsiveness<\/td><td>\u2264 200ms<\/td><td>&gt; 500ms<\/td><\/tr><tr><td>CLS<\/td><td>Visual stability<\/td><td>\u2264 0.1<\/td><td>&gt; 0.25<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p>Core Web Vitals are Google&#8217;s way of quantifying what your visitors already feel \u2014 whether your site is fast, responsive, and visually stable.<\/p>\n\n\n\n<p>The good news is that most WordPress sites can achieve passing scores with a combination of image optimisation, sensible caching, reducing unnecessary JavaScript, and reserving space for dynamic content.<\/p>\n\n\n\n<p>You don&#8217;t need to chase a perfect 100 in PageSpeed Insights. Focus on getting all three metrics into the &#8220;Good&#8221; range for your real users, and you&#8217;ll be ahead of the vast majority of websites.<\/p>\n\n\n\n<p>If you&#8217;re a Webfort customer and need a hand diagnosing or fixing your Core Web Vitals, get in touch with our support team. We&#8217;re always happy to help you get the best performance out of your site.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve ever run your site through Google PageSpeed Insights, you&#8217;ll have seen three metrics front and centre: Largest Contentful Paint (LCP), Interaction to Next Paint (INP), and Cumulative Layout Shift (CLS). Together, these are known as Core Web Vitals \u2014 and they directly influence how Google ranks your website. Core Web Vitals aren&#8217;t just [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":39,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[9,6,4,5],"class_list":["post-13","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-performance","category-wordpress","tag-core-web-vitals","tag-page-speed","tag-speed-optimisation","tag-wordpress-performance"],"_links":{"self":[{"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":2,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":26,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/posts\/13\/revisions\/26"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/media\/39"}],"wp:attachment":[{"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webfort.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}