Veltos.Tech

Development

A Slow Site Loses Money: Core Web Vitals and Conversion

Site speed is not a technical metric, it is a line in the revenue report. Core Web Vitals explained in plain language, how to find the real cause of a slow page, and a fix list sorted by return per hour of work.

In short

Core Web Vitals are three real-experience metrics: LCP (main content visible) should stay under 2.5 seconds, INP (response to interaction) under 200 ms, and CLS (layout shift) under 0.1. Widely cited industry figures put a one-second delay at roughly a 7% conversion drop, with 53% of mobile users abandoning pages that take longer than three seconds.

Money first: what every extra second costs

Two figures have circulated through the industry for years and underpin most speed discussions: a one-second delay cuts conversion by roughly 7%, and 53% of mobile users abandon a page that takes more than three seconds to load. These are industry figures rather than our own measurements, and they should be read as an order of magnitude rather than a constant for your specific site.

That order of magnitude converts easily into your own number. Take monthly revenue from organic and paid traffic, look at the mobile share of visits and the current mobile load time. If you are at four seconds instead of 2.5 with 70% mobile traffic, you already know what share of revenue is in play. That is how a speed conversation stops being technical and becomes a budget conversation.

It matters where exactly the money leaks. A slow homepage usually costs less than a slow product page or checkout: homepage visitors often already know the brand, while product pages receive paid traffic you have already paid for. So optimisation starts not where the scores are worst, but where the combination of traffic, revenue and poor scores produces the largest loss.

LCP, INP and CLS as the user experiences them

LCP answers "when did I see the thing I came for". It marks the render of the largest element in the viewport, usually the hero image, the headline or a video. Good is under 2.5 seconds, poor is above 4. This is the metric users experience as "the site is loading": until LCP happens, the person stares at empty space or a placeholder and decides whether to keep waiting.

INP answers "does the site respond when I tap". It measures the delay between a user action and a visible interface response across the whole visit. Good is under 200 ms, poor is above 500. This is the "I tapped and nothing happened, let me tap again" feeling that produces duplicate orders and convinces people the site is broken. INP replaced the older first input delay metric and judges pages more strictly.

CLS answers "does the page jump under my finger". It captures unexpected layout shifts: an image loading without reserved dimensions, an ad block appearing, a font arriving and reflowing the text. Good is under 0.1. The practical cost of poor CLS is higher than it looks: people tap the wrong button and land where they did not intend, which hits form and cart conversion directly.

One detail about search engines is frequently confused. Google has used Core Web Vitals as a ranking factor since 2021, so the influence is direct and stated. Yandex does not declare a separate speed metric in ranking but accounts for it indirectly through behavioural signals: a slow page produces bounces and short sessions, which are direct quality signals. The outcome for a site owner is the same, only the mechanism differs.

Lab data versus field data: why 98 out of 100 means nothing

There are two fundamentally different kinds of measurement, and swapping one for the other is the most common cause of wasted work. Lab data is a synthetic page run under controlled conditions: fixed network speed, a specific device, a clean cache. It is useful for debugging because it is reproducible. Field data is real measurement from real users on their devices and their connections.

Hence the classic situation: a PageSpeed Insights report shows 98 points while the real-user data block is red. The score is a lab result from one run on a notional device, the red block is what actually happens to your audience. Field data always takes priority: it is collected from real browsers and reflects the devices, networks and geography of your specific users.

For Russian traffic, Yandex Metrica belongs in that set. It reports load time broken down by device, region and source, and its session replay shows what a visit looks like end to end, including the moments when somebody taps an unresponsive button several times. The combination of browser field data, Metrica and a lab run for debugging gives the full picture and stops you optimising an imaginary problem.

  • Field data comes first: it is your real audience, not a test device.
  • Lab runs are for debugging and before-and-after comparison, not for reporting.
  • Look at mobile and desktop separately, an averaged number hides the problem.
  • Metrica reports speed by region, which is often the key breakdown in Russia.

Diagnosis: finding the real cause

Start with the network waterfall in browser developer tools, with network and CPU throttling switched on. The waterfall shows the request sequence and what is waiting on what. Look for three things: a long bar before the first byte, which points at a slow server; long chains where one resource waits for another; and large files loading ahead of what the user actually sees.

Next, find the LCP element itself, which the tools highlight directly on the page. What you do next depends on what it is. If it is an image, the questions are weight, format, dimensions and whether it carries a lazy-loading attribute it should not have. If it is a text block, a render-blocking font is almost certainly the culprit. If the element appears only after a script runs, the content is client-rendered and waiting on JavaScript.

Render-blocking resources are easy to identify: any stylesheet or script loaded in the head without deferring attributes delays first paint. Check third-party connections separately, meaning analytics counters, the support chat, ad pixels and callback widgets. In practice these routinely account for half the load time, they are usually added by marketing rather than engineering, and nobody reviews the list for years.

For INP the order differs: open the performance profiler and interact with the interface the way a user would. Look for long tasks on the main thread, stretches where the browser is busy for more than 50 ms and cannot respond to a tap. The culprits are standard: heavy event handlers, re-rendering large lists, synchronous work on keystrokes, and the same third-party scripts executing at the worst possible moment.

What to fix first: a list ranked by return per hour

Images give the highest return almost every time. Modern formats such as WebP and AVIF weigh 25-50% less at the same quality, and correct dimensions per screen save more still: serving a 2,000-pixel-wide image to a 390-pixel phone is the most common and most expensive mistake there is. One separate rule: the hero image above the fold is never lazy-loaded, and everything below the fold always is.

Third-party scripts are second on return and first on being underestimated. Analytics, chats, pixels, social widgets and callback tools together can cost whole seconds. The work has two steps: an audit to establish what is actually used and by whom, then deferring everything not needed in the first second. A support chat that initialises three seconds after load has never lost a single conversation and gives a full second back to LCP.

Fonts and critical CSS deliver a visible effect for modest effort. Loading a font without specifying display behaviour means text is either invisible or repainted with a shift. Limit the number of weights, use modern formats, set the display behaviour and preload what the first screen needs. Critical CSS, meaning the above-the-fold styles inlined into the page, removes render blocking at the start.

The server layer, caching and a CDN close out the list. Time to first byte above 600 ms means front-end work is pointless until the server is addressed: heavy database queries, no page caching, weak hosting. A CDN matters for an audience spread across a country, where the gap between one city and another served from a single origin is measured in hundreds of milliseconds, a pure loss that configuration fixes.

FixImpactEffortMetric improved
Compress images and move to WebP/AVIFVery highLowLCP
Serve images sized to the viewportHighLowLCP
Defer third-party scripts and drop unused onesVery highLowLCP, INP
Set image dimensions and reserve space for bannersHighLowCLS
Fix font loading and cut weight variantsMediumLowLCP, CLS
Enable server caching and compressionHighMediumLCP
Inline critical CSS and defer the restMediumMediumLCP
Add a CDNHigh for a geographically spread audienceMediumLCP
Break up long main-thread tasksHigh on interactive pagesHighINP
Speed up server response and database queriesVery high when TTFB exceeds 600 msHighLCP
Fixes ranked by impact against effort

What you can actually fix on your platform

On Tilda and similar builders you can compress images, reduce block count, drop background video and remove surplus embedded scripts. You cannot control critical CSS, fine-grained resource loading order or the final HTML structure. The practical ceiling is usually this: moving from poor scores to acceptable ones is achievable, moving to excellent ones is not. If speed is critical to your traffic, that is an argument for changing platform rather than optimising forever.

On WordPress almost everything is fixable, and the main job is auditing existing plugins rather than adding a caching one. A typical site carries thirty plugins, each loading its own styles and scripts on every page including the ones where it is not used. Disabling half the unused plugins usually beats any amount of cache tuning. After that comes page caching, on-the-fly image optimisation, script deferral and a CDN where needed.

Bitrix has a built-in composite mode and its own caching mechanisms that deliver solid results when configured properly. The main problems usually sit elsewhere: heavy database queries inside component templates, unoptimised catalogue images and years of accumulated library includes. Here it is most effective to start by profiling the server side rather than the front end.

On Next.js and similar stacks the ceiling is highest: server rendering, automatic image optimisation, route-level code splitting, static generation for pages that rarely change. Poor speed here is almost always a consequence of specific code decisions: excessive client components, heavy libraries in the shared bundle, no request caching. All of it is fixable, and fixable predictably.

Which pages to start with: not the homepage

The instinct is to start with the homepage, and it is almost always the wrong priority. Take the landing page report, sort by traffic and by revenue contribution, overlay the speed data, and you get a list whose first three or four rows deliver more than a month of sitewide work. Usually those are product pages, service pages receiving paid traffic, and catalogue search results.

The second filter is template type. On most sites ten thousand pages are generated from five or seven templates, so fixing one product page template improves thousands of pages at once. That is an important difference from, say, content work: here the effort scales automatically, and a well chosen point of intervention lifts an entire section.

Finally, record the state before and after. Speed degrades on its own: marketing adds a pixel, an editor uploads an uncompressed image, a developer pulls in a library for one function. Without regular checks a site returns to its original numbers within months. The practical minimum is a monthly review of field data for the key templates, plus a rule that no new third-party script gets added without a justification.

Frequently asked questions

Does site speed affect Yandex rankings?

It does, though less directly than in Google. Google has used Core Web Vitals as a stated ranking factor since 2021. Yandex does not declare a separate speed metric but does weigh behavioural signals: a slow page produces more bounces, shorter sessions and returns to the results page, all strong negative signals. Add to that Yandex having moved fully to mobile-first indexing, meaning the mobile version is what gets evaluated, so a slow mobile site is penalised twice over.

PageSpeed gives me 95 but the site feels slow. Why?

The PageSpeed score is a lab measurement of one run on a notional device and network. Your users open the site on their own phones, on their own networks, with extensions installed and from a different geography. Look at the real-user data block in the same report: if it is red while the score is green, trust the first one. A common cause of the gap is a heavy interface after load, where the page paints quickly but responds to taps with a delay, which shows in INP rather than in the overall score.

What is INP and how does it differ from the old FID metric?

FID measured only the delay of the first interaction and was a lenient metric: if the first tap was handled quickly, anything could happen afterwards. INP evaluates interface responsiveness across the whole visit and takes the worst results, which reflects real experience far more honestly. The good threshold is 200 ms and poor is above 500 ms. In practice INP suffers most from heavy event handlers, re-rendering large lists and third-party scripts running on the main thread.

What does speeding up a site cost?

A baseline package of image compression, deferred third-party scripts, caching and font configuration typically takes 10 to 30 hours and captures most of the available improvement on the majority of sites. Veltos.Tech prices work on an existing site from 35,000 RUB. Deep optimisation involving template rework, critical CSS, server query tuning and breaking up long tasks costs more and is quoted after an audit, since it depends on the platform and on the accumulated state of the code.

Should I remove the support chat and analytics for the sake of speed?

You do not need to remove them, you need to load them correctly. Run an audit: almost every site turns out to carry counters for systems nobody has used in a year and pixels from long-closed campaigns. Everything that survives the audit should load deferred, after the main content paints or on the first user interaction. A chat that appears after three seconds loses no conversations, and a full second comes back to LCP. The one exception is A/B testing scripts, which have to run before paint.

Need a hand with this?

We do this work, not just write about it. Describe the task and we will scope it and send a staged estimate.

Related services

Read next