> ## Content Index
> Fetch the complete content index at: https://www.ectobuilder.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Core Web Vitals for Ghost: How to Make Your Theme Fast (and Why It Matters for SEO)
- URL: https://www.ectobuilder.com/blog/ghost-core-web-vitals/
- Published: 2026-10-13T20:46:08.000Z
- Updated: 2026-10-19T15:13:54.000Z
- Description: What LCP, INP and CLS measure, how Google uses them, how to check your Ghost site, and what makes a Ghost theme slow. Plus the speed settings and built-in speed test in Ectobuilder.
- Author: Michal Wlosik
- Tags: Guides, SEO, Performance

Ghost is fast out of the box. It renders pages on the server, it has no plugins, and it doesn't load a page builder's worth of scripts. But a Ghost site is only as fast as its theme, its pictures and the scripts you add to it. A heavy hero image or a font that blocks the page can turn a quick Ghost site into a slow one.

Google measures that speed with three numbers called **Core Web Vitals**. This guide explains what they mean, why they matter for SEO, how to check your own site, and how to fix the things that usually slow Ghost themes down, with code or with a few switches in Ectobuilder.

## What are Core Web Vitals?

Core Web Vitals are three measurements of how a page feels to a real person: how fast it shows up, how quickly it reacts, and whether it stays still while it loads.

- **Largest Contentful Paint (LCP)** measures loading. It's the time until the biggest thing on screen, usually the hero picture or the headline, has appeared. Good is **2.5 seconds or less**.
- **Interaction to Next Paint (INP)** measures responsiveness. It's how long the page takes to react visibly when someone taps, clicks or types, across the whole visit. Good is **200 milliseconds or less**. INP replaced the older First Input Delay (FID) as a Core Web Vital in March 2024.
- **Cumulative Layout Shift (CLS)** measures visual stability. It adds up how much content jumps around while the page loads, like a paragraph pushed down by a late image just as you start reading. Good is **0.1 or less**.

![Core Web Vitals thresholds: LCP good up to 2.5 s, poor over 4 s; INP good up to 200 ms, poor over 500 ms; CLS good up to 0.1, poor over 0.25](https://www.ectobuilder.com/content/images/2026/10/image-mv74netd.webp)

Google's thresholds for good, needs improvement and poor.

Two details matter when you read your numbers. First, Google looks at the **75th percentile**: a page passes when at least three out of four visits are good, so a fast connection in your office doesn't count for much. Second, mobile and desktop are scored separately, and mobile is almost always the harder one.

You'll also see a few supporting numbers in speed reports. They aren't Core Web Vitals, but they explain them:

- **First Contentful Paint (FCP)**: when the first text or picture appears.
- **Time to First Byte (TTFB)**: how long your server takes to start answering. This is mostly about hosting.
- **Total Blocking Time (TBT)**: how long scripts keep the page too busy to respond while it loads. It's the lab test's stand-in for INP.

## Why Core Web Vitals matter for SEO

Google says good Core Web Vitals line up with what its core ranking systems reward, and recommends that site owners aim for good scores. They're part of what Google calls page experience.

Be realistic about the effect, though. Relevance and content quality come first: a fast page with a weak answer won't outrank a slower page with a great one. Speed works more like a tie-breaker between pages that are otherwise similar, which on competitive searches is exactly where you need it.

The bigger effect is often on people rather than rankings. Visitors who wait for a blank screen leave before they read anything, and a button that jumps as they tap it costs you sign-ups. A faster page means more readers make it past the first screen, more of them subscribe, and fewer of them bounce back to the search results, which search engines notice too. Speed is one part of SEO; [breadcrumbs](https://www.ectobuilder.com/blog/ghost-breadcrumbs-seo/) are another easy win.

## How to check your Core Web Vitals

- [**PageSpeed Insights**](https://pagespeed.web.dev/?ref=ectobuilder.com): paste in an address and get both kinds of data described below. This is the quickest check.
- **Google Search Console** → Core Web Vitals: groups your pages into good, needs improvement and poor, based on real visits. It needs a fair amount of traffic before it shows anything.
- **Chrome DevTools** → Lighthouse: runs the lab test on your own computer, which is handy while you're changing things.

Whichever tool you use, test one page of each kind: your homepage, a post, a page, a tag page and your blog list. In Ghost, each of these uses its own template, so one can be fast while another is slow.

### Real visitors vs lab test

Speed reports mix two very different kinds of data, and it helps to know which is which.

**Real visitors (field data)** come from the Chrome UX Report: anonymous measurements from Chrome users who visited your site over the last 28 days, on their own phones and connections. This is what Google uses for ranking. Because it covers four weeks, a fix you make today takes a few weeks to show up fully. Small sites often don't have enough visits for page-level data, so the report falls back to the whole site, or shows nothing.

![Real visitors panel showing LCP 1.9 s, INP 140 ms and CLS 0.03, all rated Good, plus FCP 1.3 s and TTFB 610 ms](https://www.ectobuilder.com/content/images/2026/10/image-mv74qskk.webp)

Real-visitor data for a page that passes: all three Core Web Vitals are in the green. (Example data.)

**Lab test** results come from one load of the page, run by Google just now on a simulated mid-range phone with a slow connection. It gives you a performance score from 0 to 100, and it works on a brand-new site with no visitors. It can't measure INP, because nobody clicks anything, so it shows Total Blocking Time instead.

![Lab test with a performance score of 94 and LCP, FCP, TBT, CLS and Speed Index all rated good](https://www.ectobuilder.com/content/images/2026/10/image-mv74q0fj.webp)

The lab test: one simulated load, scored out of 100\. (Example data.)

Use the lab test to find and check fixes quickly, and real-visitor data to see whether they worked for actual readers. If the two disagree, trust your real visitors: the lab's slow test phone is deliberately harsh.

### If Lighthouse flags llms.txt

Newer versions of Lighthouse add an **Agentic Browsing** section, and one of its checks often fails on Ghost sites: "llms.txt does not follow recommendations". It has nothing to do with speed: it doesn't change your performance score or your Core Web Vitals. It usually means Ghost's llms.txt is switched off. To turn it on, go to **Settings → Meta data** in Ghost Admin and switch on **Enable structured data for LLMs and AI search engines**. More in [how to turn on llms.txt in Ghost](https://www.ectobuilder.com/blog/ghost-llms-txt/).

## What slows Ghost themes down

Ghost itself is rarely the problem. These are the usual causes, roughly in order of how often we see them:

- **Oversized pictures.** A 3,000-pixel feature image sent to a phone that shows it 400 pixels wide is the most common cause of a slow LCP. Ghost can make smaller copies of every image, but only if the theme asks for them.
- **The main picture loads late.** If the hero image is lazy-loaded, or waits behind other files, the biggest thing on screen arrives last.
- **Render-blocking fonts and CSS.** Google Fonts loaded the usual way stop the page from drawing until they arrive. Big theme stylesheets do the same.
- **Third-party scripts.** Analytics, chat widgets, ad tags and embedded comments all compete for the phone's processor, which hurts INP.
- **Too many posts per page.** A blog list with 30 cards means 30 pictures and a very long page.
- **Layout shifts.** Pictures without set dimensions, late fonts that change text size and banners that push content down all add to CLS.
- **Slow hosting.** A high Time to First Byte comes from your server, not your theme. A cheap server far from your readers, with no caching, adds delay to every page. (See [how to host Ghost on a budget](https://www.ectobuilder.com/blog/cheapest-blogging-platform/).)

## How Ectobuilder makes Ghost themes fast, out of the box

[Ectobuilder](https://www.ectobuilder.com/) builds these fixes into every theme it exports, so you don't have to hand-edit templates:

- **One small stylesheet.** The theme's CSS is compiled to include only the styles your pages actually use, with no CSS framework shipped whole and no jQuery.
- **Right-sized pictures.** Every image gets several sizes from Ghost, in WebP, so a phone downloads a phone-sized picture and a large screen gets a sharp one.
- **The main picture first.** The first large image on a page is marked as high priority, so the browser fetches it before anything else. Every picture further down loads lazily, only as readers scroll to it.
- **Smaller uploads.** Pictures you upload in the editor are converted to WebP and capped at a sensible size before they're stored.
- **Scripts that wait.** With the cookie banner on, analytics and embeds don't run until visitors agree, and comments load only when readers reach them.

On top of that, the **Optimization** settings let you decide the rest.

## The Optimization settings

Open your theme, go to **Settings → Optimization**, and you'll find five settings. They apply the next time you deploy your theme.

![Ectobuilder Optimization settings: Optimize images, Load fonts alongside the page, Load comments on scroll, Posts per page, Scripts wait for consent](https://www.ectobuilder.com/content/images/2026/10/image-mv74nlgd.webp)

Settings → Optimization in Ectobuilder.

- **Optimize images** (on by default): right-sized WebP copies for every screen, the main picture first and the rest loaded lazily. Leave it on unless you have a reason not to.
- **Load fonts alongside the page**: text shows straight away in a system font, then switches to your Google Font when it arrives, instead of waiting for it. This improves First Contentful Paint and LCP. The trade-off is a brief change of font on the first visit.
- **Load comments on scroll** (on by default): comment widgets, which can be heavy, load only when readers get near them.
- **Posts per page**: how many posts your blog, tag and author pages list before the "load more" step. Twelve is a good balance; fewer is faster.
- **Scripts wait for consent**: links to the cookie banner. With it on, tracking scripts load only after visitors agree, which also keeps them off the critical path for everyone who doesn't. (More in [cookie consent on Ghost](https://www.ectobuilder.com/blog/ghost-cookie-consent/).)

## Test your speed without leaving the editor

Once your theme is deployed, **Settings → Speed test** runs Google's PageSpeed test on your live site and shows the results in plain language. Pick a page, choose mobile or desktop, and click **Test speed**.

![Ectobuilder Speed test settings with a page picker, a Mobile and Desktop switch and a Test speed button](https://www.ectobuilder.com/content/images/2026/10/image-mv74yp2h.webp)

Pick a page and a device. The list has one page of each template, plus your posts and pages.

The page list offers one page of each kind, plus your own posts and pages, so you can check every template your theme uses. Test on mobile first: it's what Google ranks on.

The results come in three parts:

- **Real visitors**: your Core Web Vitals from the last 28 days, with a clear Passes or Fails. Hover over any number to see what it means.
- **Lab test**: the score out of 100 and the lab measurements.
- **What to fix**: Google's findings, rewritten as plain tasks, with a button to fix each one where your theme can.

![What to fix list: two items handled by the theme, and open items for analytics running before consent and a slow server](https://www.ectobuilder.com/content/images/2026/10/image-mv75025t.webp)

What to fix. Items your theme already takes care of are marked Handled; the rest come with a button that takes you to the right setting.

Some findings are about things outside the theme. A slow Time to First Byte points to hosting, and Ghost adds its own scripts for the sign-up portal, search and comments, so not every point in a report is down to your design.

[![CTA Image](https://www.ectobuilder.com/content/images/size/w256h256/2026/06/Ecto_builder_logo_sq_small.png)](https://editor.ectobuilder.com/login?mode=signup&plan=free&ref=ectobuilder.com) 

****A fast Ghost theme, out of the box.**   
Ectobuilder themes ship with right-sized images, lean CSS and scripts that wait, plus a speed test built into the editor.

[Try it free ](https://editor.ectobuilder.com/login?mode=signup&plan=free&ref=ectobuilder.com) 

## More ways to speed up a Ghost site

- **Upload pictures at a sensible size.** Around 2,000 pixels wide is plenty for a feature image. Ghost makes the smaller copies; it can't undo a 10 MB photo.
- **Be choosy with embeds.** Each YouTube video, tweet or map brings its own scripts. One or two per post is fine; ten will show in your INP.
- **Keep code injection lean.** Every tag in Ghost's Code injection runs on every page. Remove the ones you no longer use.
- **Put a CDN in front of self-hosted Ghost.** [Ghost(Pro)](https://ghost.org/pricing/?via=michal-207c22&ref=ectobuilder.com) includes one. If you host Ghost yourself, a free CDN such as Cloudflare in front of it cuts Time to First Byte for readers far from your server.
- **Test after every deploy.** Run the lab test after big design changes, then check real-visitor data a few weeks later.

## FAQ

#### Is a PageSpeed score of 100 necessary?

No. The lab score is a diagnostic tool, not a ranking factor. What counts for Google is passing Core Web Vitals with real visitors. A lab score in the 80s or 90s on mobile is a good result.

#### Why does my site show no real-visitor data?

Google only publishes field data once a page or site has enough Chrome visitors. New and small sites often don't. Use the lab test until then: if it's good, your real visitors will most likely be fine too.

#### I fixed something. Why haven't my numbers changed?

Real-visitor data covers the last 28 days, so it moves slowly. The lab test reflects a change straight away; the field numbers catch up over the following weeks.

#### Is Ghost faster than WordPress?

Usually, yes, because there are no plugins adding scripts and styles to every page. But the theme and the pictures matter more than the platform: a lean WordPress site can beat a heavy Ghost theme.

## Sources

- [Google Search Central: Understanding Core Web Vitals and Google search results](https://developers.google.com/search/docs/appearance/core-web-vitals?ref=ectobuilder.com)
- [Google Search Central: Understanding page experience in Google Search results](https://developers.google.com/search/docs/appearance/page-experience?ref=ectobuilder.com)
- [web.dev: Web Vitals](https://web.dev/articles/vitals?ref=ectobuilder.com)
- [web.dev: Interaction to Next Paint becomes a Core Web Vital on March 12](https://web.dev/blog/inp-cwv-march-12?ref=ectobuilder.com)
- [PageSpeed Insights](https://pagespeed.web.dev/?ref=ectobuilder.com)

*Some links in this article are affiliate links: if you sign up through them, we may earn a commission at no extra cost to you.*