Websites for Tradespeople
Menu

The Great British Trade-Off 2026

The State of UK Trades Websites 2026

We ran a Lighthouse lab test against 43,738 UK trades business websites, once as a mobile test and once as a desktop test. 31,030 returned a usable result, while failed attempts were kept in the analysis rather than silently discarded. This is what those websites look like when you measure them rather than guess.

By Janusz Wozniak · Published 2026-09-02

Websites attempted
43,738
Measured
31,030
Collected
2026-07-30 to 2026-09-01

The headline figures

Three measurements and the sample behind them. Each measurement is a median or a share, carries the number of websites behind it, and was recalculated inside both collection waves before it was allowed here. The lead measurement is how long the largest visible content element during loading took to appear in the mobile Lighthouse test — Lighthouse calls it Largest Contentful Paint, and the rest of this report calls it LCP.

Figure 1

The headline measurements, with the number of websites behind each

Median mobile LCP
6.7s
Sample size 30,399in the mobile Lighthouse test
Mobile pages with LCP over 4 s in the lab
72.5%
Sample size 30,399
Median desktop LCP
1.4s
Sample size 30,483the same measurement in the desktop test
Websites measured
31,030
of 43,738 attempted; the rest returned no usable automated audit on either device
Sample
43,738 websites attempted. Each measurement below shows the number of websites that returned that particular measurement — the attempted count is the population, not the denominator of any figure.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • A seeded city sample, not a representative sample of the UKSeverity: high

    Sampling was seeded on a set of major cities: 16 cities contribute several hundred domains each, while the remainder form a long tail. The dataset is large, but it is not a random or weighted sample of UK trades businesses, and no figure here should be read as a national estimate. It describes the 31,030 audited websites in this dataset.

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

View as a table
Headline figures with their sample sizes
FigureValueWebsites
Median mobile LCP (in the mobile Lighthouse test)6.7s30,399
Mobile pages with LCP over 4 s in the lab72.5%30,399
Median desktop LCP (the same measurement in the desktop test)1.4s30,483
Websites measured (of 43,738 attempted; the rest returned no usable automated audit on either device)31,030

Key findings

We requested a Lighthouse audit for 43,738 UK trades business websites, once as a mobile test and once as a desktop test. 31,030 returned a usable result on at least one of the two. Each finding below carries the number of websites that returned that particular measurement; those counts differ from one another, and none of them is 43,738. Every figure here was recalculated inside each collection wave separately, and anything that did not hold across both was left out.

  1. Half of the 30,399 websites with a mobile LCP took 6.7 seconds or more for their largest contentful element to render. That is a median, not an average: half were slower still. 72.5% of them took over 4 seconds.
  2. The same websites are slower on mobile than on desktop, almost without exception. Of the 29,969 websites that returned an LCP on both devices, 99.5% recorded a higher one under the mobile strategy, a median of 5.1 seconds apart. Of the 29,965 scored on both, 87.5% scored lower on mobile, a median of 18 points apart. These compare each website against itself rather than one population against another.
  3. Across all returned scores, median Performance was 67 on mobile (30,397 websites) and 90 on desktop (30,481). Those are different cohorts, which is why the within-site comparison above is the stronger evidence of a device difference.
  4. Sorted into Lighthouse's own bands, 15.7% of the 30,397 websites with a mobile Performance score sit in “good”, 73.6% in “needs improvement” and 10.7% in “poor”. The middle band holds roughly three websites in four.
  5. 12,708 of the 43,738 websites attempted returned no usable automated audit on either device, equal to 29.1% of those attempted. That is a failed measurement, not evidence of a broken website. Some attempts failed on our side of the request and others were reported by the audit service as pages it could not load or render; the retained data does not establish the underlying reason for each failure. Those websites remain in the dataset but do not contribute to performance measurements they did not return.
  6. Platform differences were visible, but they are not causal. We identified a platform for 19,359 websites, or 44.3% of those attempted. Among identified sites, median mobile Performance was 61 for WordPress across 9,869 websites and 69 for Wix across 5,031. That is an observed difference between two groups of websites, not evidence that either platform caused the result.

What these findings do not prove

  • Nothing here was assigned. Every business chose its own platform, its own trade and its own town, and the audit measured what was already there.
  • So no comparison in this report can carry a cause. Where two groups differ, that is a difference between the websites in them.
  • The sample was seeded on a set of cities rather than drawn at random.
  • It is not weighted to the UK trades population.
  • No figure here is a national estimate.
  • Platform figures describe the websites whose platform we identified in this sample. They are not a UK market share.

About the dataset

This is the first edition of an annual study, and dataset 2026-09.2 is the version every figure on this page was produced from. Between 2026-07-30 and 2026-09-01 we requested a Lighthouse audit for 43,738 UK trades business websites, found through listings on a UK business directory, once with Lighthouse's mobile test and once with its desktop test. 31,030 returned a usable result on at least one of the two.

  1. The dataset narrows at every step, and the steps are not interchangeable. 30,557 websites returned at least one mobile category score and 30,608 at least one desktop score. These device-specific cohorts overlap, but they are not identical. Narrower still are the individual measurements: 30,397 websites returned a mobile Performance score and 30,399 a mobile LCP. 43,738 is the number of websites we attempted, and it is the denominator of none of them.
  2. 12,708 websites, 29.1% of those attempted, returned no usable automated audit on either device. They stay in the dataset and in the row-level download, and they contribute to no measurement. A failed automated audit is not evidence that a website is broken.
  3. Collection ran in two near-disjoint passes: 23,525 websites in the first, across 183 towns and cities, and 20,213 in the second, across 18. The two waves differ in date, city set and trade mix at once, so a difference between them cannot be separated from the way the data was gathered. Every figure in this report was therefore recalculated inside each wave before publication, and anything that did not hold across both was left out.
  4. A platform could be identified for 19,359 websites, 44.3% of those attempted. Detection was a separate request to each homepage rather than part of the audit, so a website that answered neither request appears in neither count.

How to read a Lighthouse lab result

  • Each figure comes from one automated audit of one listed page, requested once with PageSpeed Insights' mobile strategy and once with its desktop strategy.
  • It is a laboratory measurement. It describes how that page behaved in that test, not what visitors to the website experienced.
  • The device and network conditions Google applied were not recorded, and its API does not return them. What is known about how these audits ran, and what is not, is set out in the methodology below.
  • Medians, not averages, throughout. The timing distributions have long right tails, and an average would describe the tail rather than the typical website.
  • Two of the timing metrics sit at exactly zero for a large share of websites, so they are described by their distribution rather than by a single median.
  • An audit that returned nothing is a failed measurement. The retained data does not establish the underlying reason an individual page could not be measured, and a website that could not be measured here may be perfectly serviceable to a visitor.
What the dataset contains
MeasureValue
Websites attempted43,738
Returned a result on at least one device31,030
Returned any mobile category score30,557
Returned any desktop category score30,608
Returned a mobile Performance score30,397
Returned a mobile LCP30,399
Returned no usable audit on either device12,708
A platform could be identified44.3%
Collected2026-07-30 to 2026-09-01
  • C2Two crawl waves with different audit-failure rates

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

  • C3A seeded city sample, not a representative sample of the UK

    Sampling was seeded on a set of major cities: 16 cities contribute several hundred domains each, while the remainder form a long tail. The dataset is large, but it is not a random or weighted sample of UK trades businesses, and no figure here should be read as a national estimate. It describes the 31,030 audited websites in this dataset.

  • C4Sites with no detected CMS are partly sites the audit could not load

    The mobile audit fails on 51.3% of domains with no detected CMS, against 3.4% where a platform was identified. Platform detection was a separate fetch of the homepage, not part of the audit, but the two are not independent for all that: a site that did not answer the detector could not be fingerprinted, and a site that did not answer one request often did not answer the other. The undetected cohort is therefore selected, not random, and every per-platform row carries both its sample size and its own audit-failure rate so the selection is visible beside the medians rather than in a footnote. Detection also ran at a different time from the audit for the earlier wave: see the platform-detection row of the test conditions.

  • C7These are laboratory measurements

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • C10Total Blocking Time and Layout Shift are concentrated at zero

    Total Blocking Time is exactly zero on 35.2% of mobile results and Cumulative Layout Shift on 45.6%. A median of a distribution with that much mass at zero reports the zero and hides the tail. Both are reported as a share-at-zero alongside upper percentiles rather than as a median alone.

  • C14A small number of audits returned only some categories

    170 mobile and 140 desktop audits returned some category scores but not all, most often the static categories with no performance trace. They are counted in the denominator and contribute only the metrics they actually produced, so any given median may rest on slightly fewer rows than the cohort total. Each figure carries its own sample size.

  • C19The dataset holds every website attempted, and almost no figure uses that as its denominator

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

How slow is slow on a phone

LCP is the measurement this chapter is built on: how long the largest contentful element on the page took to render. Below is the whole spread behind the median in the headline figures, with Google's published LCP reference thresholds marked on it.

  1. Half of the 30,399 websites with a mobile LCP took 6.7 seconds or more, and 72.5% took over 4 seconds. Both figures were recalculated inside each collection wave before they were published, and both held.
  2. A single figure is a poor summary of a spread this wide, which is why the chart shows all of it and the table beneath the chart gives the percentiles. The distribution has a long right tail: the axis is capped so the bulk of the data stays legible, and the websites beyond the cap are counted on the chart rather than hidden by it.
  3. The 2.5-second and 4-second lines are Google's published LCP reference thresholds. Here they are reference points for interpreting a laboratory result and nothing more: not a pass or fail certification, not a claim about search rankings, and not a measurement of what visitors to these websites experienced.
  4. These are laboratory measurements. The absolute numbers describe the test rather than any particular visitor's connection. The main comparisons in this report were collected through the same PageSpeed Insights request pattern within the same five-week window, and the headline figures used here also held when the two collection waves were recalculated separately. The exact service-side device and network conditions were not retained.

Test your own website

  • PageSpeed Insights is public. You can run a mobile PageSpeed Insights test on your own website and read the same LCP metric.
  • One run is an estimate. This dataset is a single run per website per device, and a repeat run of the same page can land somewhere else on this chart.
  • Your result is not directly comparable with a figure in this report. The conditions the service applied to these audits were not recorded, and there is nothing to confirm it applies the same ones today.

Figure 2

Mobile LCP across every website with a mobile LCP result

LCP, mobile. Each of the 20 columns covers a band of 2.3s, and its height is how many sites were measured inside that band. The busiest band is 2.3s – 4.5s, holding 6,454 of 30,399 sites (21.2%).

Number of sites

LCP, mobile: the distribution across 30,399 sitesColumns run left to right from 0ms to 45.0s, and each column's height is the number of sites measured inside that band, against the count axis on the left. A dashed column past the break at the right-hand end holds the 240 sites measured above 45.0s. Dashed vertical lines mark 2.5s and 4.0s on the axis; the share of sites on each side is stated beneath the chart. Every band and its exact count is listed in the table beneath the chart.02,0004,0006,0008,0000ms – 2.3s: 3,344 sites (11.00%)2.3s – 4.5s: 6,454 sites (21.23%)4.5s – 6.8s: 5,547 sites (18.25%)6.8s – 9.0s: 4,979 sites (16.38%)9.0s – 11.3s: 3,152 sites (10.37%)11.3s – 13.5s: 1,993 sites (6.56%)13.5s – 15.8s: 1,412 sites (4.64%)15.8s – 18.0s: 919 sites (3.02%)18.0s – 20.3s: 677 sites (2.23%)20.3s – 22.5s: 480 sites (1.58%)22.5s – 24.8s: 340 sites (1.12%)24.8s – 27.0s: 253 sites (0.83%)27.0s – 29.3s: 157 sites (0.52%)29.3s – 31.5s: 106 sites (0.35%)31.5s – 33.8s: 103 sites (0.34%)33.8s – 36.0s: 73 sites (0.24%)36.0s – 38.3s: 58 sites (0.19%)38.3s – 40.5s: 42 sites (0.14%)40.5s – 42.8s: 39 sites (0.13%)42.8s – 45.0s: 31 sites (0.10%)2.5s4.0sAbove 45.0s: 240 sites (0.79%)2400ms11.3s22.5s33.8s45.0sabove45.0s

LCP, mobile

  • 2.5s — Google's published LCP reference threshold for "good", 2.5 s — a reference point for reading a lab result, not a pass mark.
  • 4.0s — 72.5% of websites had LCP over 4 s. Google's published LCP reference threshold for "poor", 4 s — a reference point for reading a lab result, not a pass mark.

240 sites above 45.0s — 0.8% of the sample — are drawn as the dashed column past the break, not folded into the last band. The highest single measurement was 476.7s.

View every band as a table
LCP, mobile — 30,399 sites in 20 equal bands, plus every site measured above 45.0s.
BandSitesShare of sample
0ms – 2.3s3,34411.00%
2.3s – 4.5s6,45421.23%
4.5s – 6.8s5,54718.25%
6.8s – 9.0s4,97916.38%
9.0s – 11.3s3,15210.37%
11.3s – 13.5s1,9936.56%
13.5s – 15.8s1,4124.64%
15.8s – 18.0s9193.02%
18.0s – 20.3s6772.23%
20.3s – 22.5s4801.58%
22.5s – 24.8s3401.12%
24.8s – 27.0s2530.83%
27.0s – 29.3s1570.52%
29.3s – 31.5s1060.35%
31.5s – 33.8s1030.34%
33.8s – 36.0s730.24%
36.0s – 38.3s580.19%
38.3s – 40.5s420.14%
40.5s – 42.8s390.13%
42.8s – 45.0s310.10%
Above 45.0s2400.79%

One laboratory measurement per site. Bands are equal width and stop at 45.0s; a site above it is counted in the final row rather than folded into the last band. Highest single measurement: 476.7s.

Sample
n = 30,399
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • Time to Interactive largely restates Largest Contentful PaintSeverity: medium

    Time to Interactive is exactly equal to Largest Contentful Paint on 32.8% of mobile results, and is never lower than it. Lighthouse resolves TTI to the later of its inputs, so on a page with no significant work after the main paint the two collapse together. TTI is published for completeness but carries little information independent of LCP, and it is not used for any headline.

  • Speed Index partly restates First Contentful PaintSeverity: medium

    Speed Index is exactly equal to First Contentful Paint on 26.0% of mobile results. Lighthouse derives Speed Index from how a page's appearance fills in over time, so on a page that reaches its final appearance in a single paint the two collapse together. Published for completeness; not used for any headline.

  • Total Blocking Time and Layout Shift are concentrated at zeroSeverity: medium

    Total Blocking Time is exactly zero on 35.2% of mobile results and Cumulative Layout Shift on 45.6%. A median of a distribution with that much mass at zero reports the zero and hides the tail. Both are reported as a share-at-zero alongside upper percentiles rather than as a median alone.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

View as a table
Spread of mobile LCP, by percentile
PercentileValue
p102.0s
p253.8s
median6.7s
p7510.7s
p9016.7s
p9522.0s
p9940.8s
max476.7s

The four Lighthouse categories, in Lighthouse's bands

Lighthouse returns four category scores, not one, and each is scored out of 100 and sorted into the same three bands. Performance is the category this report leads on. The other three are checklists of things Lighthouse can test on the page, and they sit in quite different places.

What is a good PageSpeed score, and what did these websites actually score?

  • Lighthouse sets the bands, and they are the same for every category: 90 to 100 is “good”, 50 to 89 is “needs improvement” and below 50 is “poor”. That is a definition, not a finding — it is where the lines are drawn, whatever any website scores.
  • What this study adds is where real websites fell between those lines. Across the 30,397 websites that returned a mobile Performance score, the median was 67: 15.7% reached the good band, 73.6% sat in needs improvement and 10.7% in poor.
  • So a score in the sixties is not unusual among the trades websites in this sample — it is close to the middle of them. That is a description of this sample under one laboratory test, not a target, a pass mark or a statement about any individual website.
  1. On mobile the median Performance score is 67 across 30,397 websites, against 89 for Accessibility (30,557 websites), 81 for Best Practices (30,538) and 92 for SEO (30,545). Each category has its own cohort, because a website can return one category's score without returning another's.
  2. Performance is also the category with the widest spread. 10.7% of the 30,397 websites with a mobile Performance score sit in Lighthouse's lowest band, 73.6% in the middle band and 15.7% in the highest. The other three categories are drawn on the same bands in the table below; their splits were not tested across the collection waves, so they are shown there and not quoted here.
  3. The SEO category is the one most often misread. It is a set of automated checks for a subset of technical and on-page SEO basics that Lighthouse can test, scored out of 100. It is not a ranking score, it does not measure search visibility, and a high score here does not tell us how a search engine ranks the page.
  4. Across the 30,481 websites that returned a desktop Performance score, the median is 90. That is a different cohort from the mobile one, which is why the device comparison in the next section is made on the websites that returned a score on both devices rather than by setting these two medians against each other.

What each category measures

  • Performance — a weighted score built from several laboratory performance metrics, including LCP.
  • Accessibility — automated checks for things like colour contrast, image alternatives and form labels. Automated testing covers part of accessibility, not all of it, so a high score is not an accessibility audit.
  • Best Practices — a mixed checklist covering matters such as HTTPS, console errors and deprecated browser features.
  • SEO — automated checks for a subset of technical and on-page SEO basics that Lighthouse can test. It is not a ranking score, it does not measure search visibility, and a high score does not tell us how a search engine ranks the page.

Figure 3

Every website with a score, sorted into Lighthouse's three score bands

  • Poor
  • Needs improvement
  • Good
  • Performance, mobile

    n = 30,397

    Performance, mobile: share of sites in each score bandPoor: 10.7%, 3,264 sites; Needs improvement: 73.6%, 22,365 sites; Good: 15.7%, 4,768 sites. Sample: 30,397 sites.73.6%15.7%

    Bands too narrow to label: Poor 10.7%

  • Performance, desktop

    n = 30,481

    Performance, desktop: share of sites in each score bandPoor: 2.8%, 864 sites; Needs improvement: 45.6%, 13,907 sites; Good: 51.5%, 15,710 sites. Sample: 30,481 sites.45.6%51.5%

    Bands too narrow to label: Poor 2.8%

  • Accessibility, mobile

    n = 30,557

    Accessibility, mobile: share of sites in each score bandPoor: 0.8%, 244 sites; Needs improvement: 50.2%, 15,343 sites; Good: 49.0%, 14,970 sites. Sample: 30,557 sites.50.2%49.0%

    Bands too narrow to label: Poor 0.8%

  • Accessibility, desktop

    n = 30,608

    Accessibility, desktop: share of sites in each score bandPoor: 0.7%, 221 sites; Needs improvement: 48.8%, 14,928 sites; Good: 50.5%, 15,459 sites. Sample: 30,608 sites.48.8%50.5%

    Bands too narrow to label: Poor 0.7%

  • SEO, mobile

    n = 30,545

    SEO, mobile: share of sites in each score bandPoor: 5.4%, 1,645 sites; Needs improvement: 26.0%, 7,941 sites; Good: 68.6%, 20,959 sites. Sample: 30,545 sites.26.0%68.6%

    Bands too narrow to label: Poor 5.4%

  • SEO, desktop

    n = 30,599

    SEO, desktop: share of sites in each score bandPoor: 5.4%, 1,656 sites; Needs improvement: 25.5%, 7,801 sites; Good: 69.1%, 21,142 sites. Sample: 30,599 sites.25.5%69.1%

    Bands too narrow to label: Poor 5.4%

  • Best Practices, mobile

    n = 30,538

    Best Practices, mobile: share of sites in each score bandPoor: 1.0%, 300 sites; Needs improvement: 61.0%, 18,621 sites; Good: 38.0%, 11,617 sites. Sample: 30,538 sites.61.0%38.0%

    Bands too narrow to label: Poor 1.0%

  • Best Practices, desktop

    n = 30,589

    Best Practices, desktop: share of sites in each score bandPoor: 0.9%, 284 sites; Needs improvement: 60.2%, 18,428 sites; Good: 38.8%, 11,877 sites. Sample: 30,589 sites.60.2%38.8%

    Bands too narrow to label: Poor 0.9%

0%50%100%
View as a table
Share of sites in each score band, with the count behind every share.
GroupnPoor (sites)Needs improvement (sites)Good (sites)Poor (share)Needs improvement (share)Good (share)
Performance, mobile30,3973,26422,3654,76810.7%73.6%15.7%
Performance, desktop30,48186413,90715,7102.8%45.6%51.5%
Accessibility, mobile30,55724415,34314,9700.8%50.2%49.0%
Accessibility, desktop30,60822114,92815,4590.7%48.8%50.5%
SEO, mobile30,5451,6457,94120,9595.4%26.0%68.6%
SEO, desktop30,5991,6567,80121,1425.4%25.5%69.1%
Best Practices, mobile30,53830018,62111,6171.0%61.0%38.0%
Best Practices, desktop30,58928418,42811,8770.9%60.2%38.8%
Poor”, “Needs improvement” and “Good” are Lighthouse’s own names for the ranges of its 0–100 scores. They are band names, not a verdict of ours on any website. Each score is a laboratory measurement taken once, under device emulation, so read the split as a reference point rather than a report card.
Sample
n = 30,557
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • A seeded city sample, not a representative sample of the UKSeverity: high

    Sampling was seeded on a set of major cities: 16 cities contribute several hundred domains each, while the remainder form a long tail. The dataset is large, but it is not a random or weighted sample of UK trades businesses, and no figure here should be read as a national estimate. It describes the 31,030 audited websites in this dataset.

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • A small number of audits returned only some categoriesSeverity: low

    170 mobile and 140 desktop audits returned some category scores but not all, most often the static categories with no performance trace. They are counted in the denominator and contribute only the metrics they actually produced, so any given median may rest on slightly fewer rows than the cohort total. Each figure carries its own sample size.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

View as a table
Share of sites in each Lighthouse band
CategoryPoor (0–49)Needs improvement (50–89)Good (90–100)Websites
Performance, mobile10.7%73.6%15.7%30,397
Performance, desktop2.8%45.6%51.5%30,481
Accessibility, mobile0.8%50.2%49.0%30,557
Accessibility, desktop0.7%48.8%50.5%30,608
SEO, mobile5.4%26.0%68.6%30,545
SEO, desktop5.4%25.5%69.1%30,599
Best Practices, mobile1.0%61.0%38.0%30,538
Best Practices, desktop0.9%60.2%38.8%30,589

Mobile against desktop

The same websites, measured twice. This section compares a website's two results against each other — the same listed URL requested once with PageSpeed Insights' mobile strategy and once with its desktop strategy — rather than setting one population's median against another's. The mobile and desktop cohorts are not the same websites, so subtracting one median from the other would describe no website at all.

  1. Of the 29,965 websites that returned a Performance score on both devices, 87.5% scored lower under the mobile strategy, and the median within-site gap is 18 points.
  2. Among the 29,969 websites that returned an LCP on both devices, 99.5% recorded a higher LCP under the mobile strategy. The median within-site difference was 5.1 seconds. This is a comparison of one website's two laboratory results, not a measurement of what anyone waited for, and the dataset does not say why the two differ.
  3. Those are the four measurements this section quotes, and each was recalculated inside both collection waves before publication. The counts below are sample sizes, not measurements. Everything else is in the table, described rather than quoted.
  4. Every metric has its own paired cohort, because a website can return a measurement on one device and not on the other. Performance is paired on 29,965 websites, LCP on 29,969, First Contentful Paint on 30,043, Speed Index on 30,038, and the other category scores on up to 30,135. Read the pair count beside a row, not the size of the dataset.
  5. Directions differ between the measurements, so the chart states each one beside the row it belongs to: for Largest Contentful Paint a lower value is the better result, and for the Performance score a higher value is the better result.
  6. Two of the paired measurements are not summarised by a median here. Total Blocking Time and Cumulative Layout Shift sit at exactly zero for a large share of websites on both devices, so a median of the within-site gap would report that zero and hide everything either side of it. They are paired in the dataset and in the download, and they are neither drawn nor tabulated here. Two more, Time to Interactive and Speed Index, repeat LCP and First Contentful Paint on a large share of these websites, so they are paired in the dataset but not drawn beside them either.
  7. This compares two laboratory tests of the same listed URL, not two audiences. Nothing here says that visitors using a phone experienced the mobile result or that visitors using a desktop experienced the desktop result. Nor does the dataset say why any website's two results differ: page weight, hosting, scripts and layout were not measured, and the conditions the service applied to each test were not retained.

Figure 4

The same websites, measured on a phone and on a desktop

2 measurements, each taken twice on the same website. Mobile comes out worse on 2 of them.

Every row is scaled to its own longest bar. The rows mix scores with timings, so bar lengths mean something within a row and nothing between rows. Each row prints the scale it was drawn to.

  • Solid bar: Mobile
  • Outlined bar: Desktop

Solid against outlined, and every bar carries its name in writing, so nothing here depends on telling two colours apart.

  • Largest Contentful Paint

    Lower is better · n = 29,969

    Largest Contentful Paint: Mobile 6.7s, Desktop 1.4s.Two bars scaled to this row alone, which runs from 0ms to 6.7s. The solid bar is Mobile, the outlined bar is Desktop. Lower is better. Bar lengths cannot be compared with any other row. The same figures are in the table below.Mobile6.7sDesktop1.4s

    Scale for this row only: 0ms to 6.7s

    Same-site gap: Mobile worse by 5.1s

  • Performance

    Higher is better · n = 29,965

    Performance: Mobile 67, Desktop 90.Two bars scaled to this row alone, which runs from 0 to 90. The solid bar is Mobile, the outlined bar is Desktop. Higher is better. Bar lengths cannot be compared with any other row. The same figures are in the table below.Mobile67Desktop90

    Scale for this row only: 0 to 90

    Same-site gap: Mobile worse by 18

n is the number of websites with a usable figure for both Mobile and Desktop. It varies by row because an audit can fail for one measurement and not the other.

The same-site gap is worked out on each website first, then summarised across websites, so it will not always match the difference between the two bars.

Mobile and Desktop are two measurement configurations of the same listed address in the lab. They are a reference point, not two groups of visitors.

Sample
Paired results only: each row compares one website's two results. Every metric has its own pair count, from 29,965 to 30,135 websites; the Performance pair is 29,965.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • Time to Interactive largely restates Largest Contentful PaintSeverity: medium

    Time to Interactive is exactly equal to Largest Contentful Paint on 32.8% of mobile results, and is never lower than it. Lighthouse resolves TTI to the later of its inputs, so on a page with no significant work after the main paint the two collapse together. TTI is published for completeness but carries little information independent of LCP, and it is not used for any headline.

  • Speed Index partly restates First Contentful PaintSeverity: medium

    Speed Index is exactly equal to First Contentful Paint on 26.0% of mobile results. Lighthouse derives Speed Index from how a page's appearance fills in over time, so on a page that reaches its final appearance in a single paint the two collapse together. Published for completeness; not used for any headline.

  • Total Blocking Time and Layout Shift are concentrated at zeroSeverity: medium

    Total Blocking Time is exactly zero on 35.2% of mobile results and Cumulative Layout Shift on 45.6%. A median of a distribution with that much mass at zero reports the zero and hides the tail. Both are reported as a share-at-zero alongside upper percentiles rather than as a median alone.

  • The SEO category barely varies between devicesSeverity: low

    Mobile and desktop SEO scores are identical on 95.1% of domains audited on both. The category is built largely from device-independent checks, so it is reported as a single figure rather than framed as a mobile-versus-desktop comparison.

  • A small number of audits returned only some categoriesSeverity: low

    170 mobile and 140 desktop audits returned some category scores but not all, most often the static categories with no performance trace. They are counted in the denominator and contribute only the metrics they actually produced, so any given median may rest on slightly fewer rows than the cohort total. Each figure carries its own sample size.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

View as a table
Median mobile and desktop results, and how often mobile was worse
MeasurementMobileDesktopWorse on mobileWebsites
Largest Contentful Paint6.7s1.4s99.5%29,969
Performance679087.5%29,965

8 further Lighthouse measurements are paired the same way in the dataset. They are not drawn here: the report leads on LCP and the Performance score, and two of the others repeat LCP or First Contentful Paint for a large share of sites (C8, C9).

What UK trades websites are built on

This section covers only the websites whose platform we identified in this sample. The results are shown as a table rather than a chart: a row of bars can look like a market-share graphic, and this seeded sample is not one.

  1. A platform was identified for 19,359 of the 43,738 websites attempted, 44.3%, and that figure held when the two collection waves were recalculated separately. The majority of websites attempted therefore had no platform identified at all. That group is not a platform: it is the websites where the detector found nothing, and it has its own row.
  2. Among those 19,359 websites, 52.9% are WordPress and 26.6% are Wix. Both were recalculated inside each collection wave and held. The other platforms are in the table with their own figures; they were not tested across the waves, so this section does not quote them. The table's “of identified” column is a share of those 19,359 websites and its “of all” column is a share of every website attempted, so read the column heading before lifting a figure out of it.
  3. The undetected group is large and it is not a random slice of the dataset. Detection was a separate request to each homepage, so a website that answered neither that request nor the audit appears in neither count, and the websites with no identified platform are disproportionately the websites that returned no measurement either. Every share here therefore describes the websites that answered: a platform unusually common among the websites that did not answer would be under-counted here, on the strength of its answering websites alone.

How platform detection worked

  • It was a separate request to each website's homepage, not part of the Lighthouse audit, and it read the page's own markup for a platform's fingerprint.
  • It recognises only the platforms it holds fingerprints for. “No platform identified” means the detector recognised nothing, which is not the same as a website having no platform.
  • For the first collection wave the detection ran weeks after the audit rather than alongside it, so a website could have changed between the two.
  • Page-builder detection runs only inside WordPress, so the builder tables later in this report describe a much smaller group again.

Figure 5

Platforms we identified, among the websites we could identify one for

Platform share, pooled and within each collection wave
PlatformOf identifiedWave 1, of identifiedWave 2, of identifiedOf allWebsites
No CMS detected54.9% of all56.7% of all55.7%24,379
WordPress52.9%52.6%53.3%23.4%10,249
Wix26.6%27.7%25.4%11.8%5,158
Duda9.5%9.7%9.3%4.2%1,839
GoDaddy Website Builder3.4%3.0%3.9%1.5%657
Squarespace3.2%2.8%3.7%1.4%624
Weebly1.3%1.3%1.4%0.6%257
Webflow1.1%1.3%1.0%0.5%223
Shopify0.8%0.6%0.9%0.3%146
Joomla0.7%0.7%0.8%0.3%144
Drupal0.3%0.3%0.4%0.1%62

"Of identified" is the share of websites whose platform we identified in this sample; "of all" is the share of every website attempted, including the ones that returned nothing to identify. Neither is a UK market share. The wave columns are shares of the websites identified within that wave; for the undetected row they are shares of all websites attempted in that wave. Wave 1 (30 Jul - 5 Aug 2026): 23,525 websites, 10,605 identified, 54.9% undetected. Wave 2 (30 Aug - 1 Sep 2026): 20,213 websites, 8,754 identified, 56.7% undetected. The undetected share is not the same in the two waves. They differ in date, city set, trade mix and list quality at once, so the gap cannot be told apart from the way the data was collected (C2).

Sample
19,359 websites with an identified platform — 44.3% of every website attempted. The other 24,379 (55.7%) had no platform we could detect and have their own row.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Two crawl waves with different audit-failure ratesSeverity: high

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

  • A seeded city sample, not a representative sample of the UKSeverity: high

    Sampling was seeded on a set of major cities: 16 cities contribute several hundred domains each, while the remainder form a long tail. The dataset is large, but it is not a random or weighted sample of UK trades businesses, and no figure here should be read as a national estimate. It describes the 31,030 audited websites in this dataset.

  • Sites with no detected CMS are partly sites the audit could not loadSeverity: high

    The mobile audit fails on 51.3% of domains with no detected CMS, against 3.4% where a platform was identified. Platform detection was a separate fetch of the homepage, not part of the audit, but the two are not independent for all that: a site that did not answer the detector could not be fingerprinted, and a site that did not answer one request often did not answer the other. The undetected cohort is therefore selected, not random, and every per-platform row carries both its sample size and its own audit-failure rate so the selection is visible beside the medians rather than in a footnote. Detection also ran at a different time from the audit for the earlier wave: see the platform-detection row of the test conditions.

  • CMS confidence is not a third level, and detector strength is not neutralSeverity: medium

    In this dataset the CMS Confidence value "low" is exactly equivalent to an undetected CMS — the two counts match to the row — so on the undetected sites confidence is not a third level. It is collapsed into a detector strength that is null whenever no CMS was found, and that identity is re-proved on every pipeline run. On identified sites, the detector's confidence level is retained rather than discarded. Every platform comparison in this report is therefore made twice: once across all identified websites and once within strong fingerprints only, so the result can be checked without relying on the weaker identifications. Only platform differences that satisfy the report's wave-sensitivity rules are quoted as findings. Differences between fingerprint-confidence strata are not treated as findings in this report.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

How the platforms compare

Median mobile Performance by platform, for the websites whose platform we identified. The chart carries the comparison with enough websites on both sides to hold across the two collection waves and after restricting the analysis to stronger platform fingerprints — Wix against WordPress, pooled and then restricted, with both waves' figures marked on each bar. Every other platform is in the table, with the number of websites behind its median and how often its audits failed.

  1. Among the websites we identified, the median mobile Performance score is 61 for WordPress (9,869 websites with a mobile Performance score) and 69 for Wix (5,031) — 8 points apart across the 14,900 websites in the two groups combined.
  2. Detector strength is not neutral, so the same comparison is made again on firmer ground. Restricted to the websites whose platform was identified from a strong fingerprint, the medians are 60 for WordPress (8,374 websites) and 67 for Wix (3,841), 7 points apart across 12,215. The difference narrows but does not disappear, and all four medians and both gaps held when the collection waves were recalculated separately.
  3. Squarespace's median, 54 across 600 websites, also held across the waves. The other platforms' medians are in the table and are not quoted here, because they were not tested across the waves — including the platform with the highest median in the table, which was tested and did not hold. Leaving the top of a table unquoted without saying so would be a choice disguised as a result, so it is said here.
  4. Each row carries its own audit-failure rate, and those rates differ materially across the table. A platform whose websites returned a measurement less often is represented in its median by the ones that answered, so read a median beside the failure rate in the same row. The undetected-platform row needs particular caution, because missing platform detection and missing Lighthouse results are related in this dataset.
  5. These are differences between groups of websites, and the study cannot say more than that. Nothing was assigned: every business chose its own platform, and businesses that choose one platform can differ from those that choose another in ways this dataset did not observe — budget, who built the site, how old it is, and how complex its content or functionality is. There is no control group and no intervention here. The next section narrows the question by holding the trade constant.

Figure 6

Wix against WordPress, median mobile Performance score, with both waves marked

Median mobile Performance score: Wix against WordPress, in 2 rows. Every bar is drawn on one scale, from 0 to 100, so a bar in one row can be compared with a bar in any other. A longer bar is a better result. The markers on a bar are the same figure recalculated inside each collection wave; the pooled figure is printed beside the bar and both wave figures beneath it.

  • Solid bar: Wix
  • Outlined bar: WordPress
  • Marker: the same figure inside one collection wave

Solid against outlined, and every bar carries its name and its figure in writing, so nothing here depends on telling two colours apart.

  • All identified sites

    Wix69

    n = 5,031 · Wave 1 70 (n = 2,836) · Wave 2 69 (n = 2,195)

    WordPress61

    n = 9,869 · Wave 1 61 (n = 5,282) · Wave 2 61 (n = 4,587)

    WordPress minus Wix: −8 points pooled; −9 in wave 1, −8 in wave 2 — robust across the split.

  • Strong fingerprint only

    Wix67

    n = 3,841 · Wave 1 67 (n = 2,076) · Wave 2 67 (n = 1,765)

    WordPress60

    n = 8,374 · Wave 1 60 (n = 4,506) · Wave 2 60 (n = 3,868)

    WordPress minus Wix: −7 points pooled; −7 in wave 1, −7 in wave 2 — robust across the split.

Sample
30,557 websites with a mobile result. The n beneath each bar counts the websites with a mobile Performance score; the table's Websites column counts every site with a mobile result, which is slightly larger.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Two crawl waves with different audit-failure ratesSeverity: high

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

  • Sites with no detected CMS are partly sites the audit could not loadSeverity: high

    The mobile audit fails on 51.3% of domains with no detected CMS, against 3.4% where a platform was identified. Platform detection was a separate fetch of the homepage, not part of the audit, but the two are not independent for all that: a site that did not answer the detector could not be fingerprinted, and a site that did not answer one request often did not answer the other. The undetected cohort is therefore selected, not random, and every per-platform row carries both its sample size and its own audit-failure rate so the selection is visible beside the medians rather than in a footnote. Detection also ran at a different time from the audit for the earlier wave: see the platform-detection row of the test conditions.

  • CMS confidence is not a third level, and detector strength is not neutralSeverity: medium

    In this dataset the CMS Confidence value "low" is exactly equivalent to an undetected CMS — the two counts match to the row — so on the undetected sites confidence is not a third level. It is collapsed into a detector strength that is null whenever no CMS was found, and that identity is re-proved on every pipeline run. On identified sites, the detector's confidence level is retained rather than discarded. Every platform comparison in this report is therefore made twice: once across all identified websites and once within strong fingerprints only, so the result can be checked without relying on the weaker identifications. Only platform differences that satisfy the report's wave-sensitivity rules are quoted as findings. Differences between fingerprint-confidence strata are not treated as findings in this report.

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

View as a table
Every platform with enough websites to report, in sample-size order. The audit-failure column belongs beside the medians, not in a footnote.
PlatformMobile PerformanceDesktop PerformanceMobile LCPAccessibilityAudit failedWebsites
No CMS detected70945.4s8551.3%11,861
WordPress61858.1s883.5%9,887
Wix69916.9s942.4%5,033
Duda77944.8s891.9%1,804
Squarespace547912.7s952.7%607
GoDaddy Website Builder77934.2s8714.5%562
Weebly61897.5s821.6%253
Webflow57819.7s893.1%216
Joomla61827.9s854.2%138
Shopify59798.4s897.5%135
Drupal1.6%61

"No CMS detected" is listed but not compared. It is not a platform, and 51.3% of those sites returned no mobile result, so the sites most likely to score badly are disproportionately the ones missing from its median (C4). Duda's median mobile Performance did not hold across the two collection waves (78 in wave 1, 75 in wave 2), so it is listed here and not treated as a headline (C2). Platforms are not ranked. A row with an em dash had too few websites for a median; its sample size is still shown.

The same trade, different platforms

Comparing platforms across the whole dataset invites an obvious objection: different kinds of business choose different platforms. These comparisons hold the trade constant, which removes one of those differences and not the rest. The chart shows Wix and WordPress in every trade with enough websites on both sides; the table shows every cell.

  1. A cell is one platform inside one trade. A cell needs 100 websites before it carries a median, so a trade appears in the chart only where both platforms clear that bar, and the table marks the cells that do not. Every median in the table is published with the number of websites behind it, and those counts differ from cell to cell.
  2. Across the 12 trades with enough WordPress and Wix websites for a comparison, the WordPress group has the lower median mobile Performance score in every one: no ties and no reversals. Repeating the test inside each collection wave, and rebuilding the eligible set from scratch each time rather than carrying the pooled one in, the direction holds again — 4 qualifying trades in the first wave and 8 in the second, with WordPress lower in all of them, again with no ties and no reversals.
  3. Read that narrowly. The wave sets are smaller than the pooled set and are largely different trades, so this is not the same 12 trades measured twice over. It is not a controlled experiment, it does not show that either platform caused a score, and it says nothing about what would happen to a website that moved from one to the other. What it supports is one narrow point: the difference between the two platforms in the previous section does not appear to be explained by trade mix alone.
  4. The individual cell figures — each trade's two medians and the gap between them — were not themselves recalculated inside the waves, so this section quotes none of them. They are in the chart and the table.
  5. Holding the trade constant removes one difference between the two groups of websites and leaves the others in place. The businesses inside a single trade still differ in budget, in who built the site, in how old it is and in how complex its content or functionality is, and none of that was observed here. A trade's cells are also drawn from different mixtures of towns and collection waves.
  6. So this is a narrower question than the one before it, not an answer to it. Nothing was assigned, there is no control group, and a difference inside a trade remains a difference between the websites in that trade that chose each platform.

Figure 7

Median mobile Performance by platform, within each trade

Median mobile Performance score, within the trade: Wix against WordPress, in 12 rows. Every bar is drawn on one scale, from 0 to 100, so a bar in one row can be compared with a bar in any other. A longer bar is a better result.

  • Solid bar: Wix
  • Outlined bar: WordPress

Solid against outlined, and every bar carries its name and its figure in writing, so nothing here depends on telling two colours apart.

  • Plumbers

    Wix71

    n = 656

    WordPress62

    n = 1,538

  • Driveways

    Wix69

    n = 353

    WordPress60

    n = 471

  • Roofers

    Wix70

    n = 317

    WordPress60

    n = 434

  • Electricians

    Wix68

    n = 198

    WordPress63

    n = 403

  • Window Cleaners

    Wix71

    n = 182

    WordPress61

    n = 408

  • Builders

    Wix69

    n = 232

    WordPress60

    n = 351

  • Flooring Services

    Wix68

    n = 125

    WordPress61

    n = 342

  • Painters And Decorators

    Wix70

    n = 152

    WordPress64.5

    n = 244

  • Joiners

    Wix69

    n = 169

    WordPress63

    n = 235

  • Domestic Cleaners

    Wix69

    n = 137

    WordPress62

    n = 191

  • Gardeners

    Wix69

    n = 129

    WordPress60

    n = 185

  • Plasterers

    Wix69

    n = 114

    WordPress64

    n = 156

Sample
only cells with at least 100 websites holding a mobile Performance score carry a figure. Holding the trade constant removes one difference between these groups, not all of them.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Sites with no detected CMS are partly sites the audit could not loadSeverity: high

    The mobile audit fails on 51.3% of domains with no detected CMS, against 3.4% where a platform was identified. Platform detection was a separate fetch of the homepage, not part of the audit, but the two are not independent for all that: a site that did not answer the detector could not be fingerprinted, and a site that did not answer one request often did not answer the other. The undetected cohort is therefore selected, not random, and every per-platform row carries both its sample size and its own audit-failure rate so the selection is visible beside the medians rather than in a footnote. Detection also ran at a different time from the audit for the earlier wave: see the platform-detection row of the test conditions.

  • CMS confidence is not a third level, and detector strength is not neutralSeverity: medium

    In this dataset the CMS Confidence value "low" is exactly equivalent to an undetected CMS — the two counts match to the row — so on the undetected sites confidence is not a third level. It is collapsed into a detector strength that is null whenever no CMS was found, and that identity is re-proved on every pipeline run. On identified sites, the detector's confidence level is retained rather than discarded. Every platform comparison in this report is therefore made twice: once across all identified websites and once within strong fingerprints only, so the result can be checked without relying on the weaker identifications. Only platform differences that satisfy the report's wave-sensitivity rules are quoted as findings. Differences between fingerprint-confidence strata are not treated as findings in this report.

  • Trade labels are the source's, unmerged, and 17.7% are absentSeverity: medium

    7,740 domains carry no trade label in the source; they are reported as their own cohort rather than dropped or reassigned. Related labels that a reader might expect to be combined — carpenters and joiners, gardeners and landscape gardeners — are kept separate, because merging them is an editorial judgement about trades rather than a correction to the data.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

  • Trade is confounded with wave, city set and platform mixSeverity: high

    Across the 26 trades large enough to rank, the share of a trade's sites collected in the first wave runs from 14.0% to 98.6%, 2 trades are drawn at least 90% from a single wave, and the waves differ in city coverage, audit-failure rate and seed-list quality (C2). The share of sites on WordPress runs from 21.7% to 46.5% and the share with no detectable platform from 32.3% to 48.5%, and platforms differ in median mobile Performance (cms-performance.json). A difference between two trades is therefore a difference between two mixtures of towns, waves and platforms that this study has not separated. The spread of trade medians (63 to 72) is also small beside the spread within a trade: the pooled interquartile range of the same score is 58 to 81. Trade exhibits are ordered by sample size rather than by score, the table is not a league table, and this study does not measure why any trade's sites score as they do.

View as a table
The same trade, different platforms: every cell, in trade sample-size order
TradeNo CMS detectedWordPressWixDuda
Plumbers71 (n=2,064)62 (n=1,538)71 (n=656)80 (n=272)
Driveways68 (n=514)60 (n=471)69 (n=353)79 (n=113)
Roofers70 (n=516)60 (n=434)70 (n=317)— (n=68)
Electricians74 (n=574)63 (n=403)68 (n=198)— (n=60)
Window Cleaners72 (n=510)61 (n=408)71 (n=182)— (n=61)
Builders71 (n=448)60 (n=351)69 (n=232)— (n=59)
Flooring Services69.5 (n=367)61 (n=342)68 (n=125)— (n=41)
Painters And Decorators71.5 (n=350)64.5 (n=244)70 (n=152)— (n=84)
Joiners70 (n=330)63 (n=235)69 (n=169)— (n=48)
Kitchen Fitters67.5 (n=301)59 (n=289)— (n=93)— (n=31)
Domestic Cleaners71 (n=328)62 (n=191)69 (n=137)— (n=38)
Gas Engineers69 (n=302)61 (n=243)— (n=97)— (n=45)
Gardeners73 (n=252)60 (n=185)69 (n=129)— (n=24)
Double Glazing68 (n=202)58 (n=282)— (n=60)— (n=36)
Tree Surgeons67 (n=193)62 (n=241)— (n=69)— (n=40)
Locksmiths76 (n=279)62 (n=201)— (n=63)— (n=21)
Glaziers70 (n=190)59 (n=229)— (n=97)— (n=44)
Carpet Cleaners77 (n=249)63 (n=185)— (n=59)— (n=19)
Scaffolders67 (n=172)60 (n=199)— (n=99)— (n=34)
Plasterers70 (n=178)64 (n=156)69 (n=114)— (n=27)
Bathroom Fitters66 (n=182)63 (n=168)— (n=67)— (n=13)
Garage Doors70 (n=157)59 (n=159)— (n=56)— (n=29)
Pest Control68 (n=154)62 (n=149)— (n=48)— (n=16)
Washing Machine Repairs71 (n=181)— (n=81)— (n=46)— (n=44)
Handyman Services75 (n=147)70 (n=109)— (n=64)— (n=19)
Fencing Contractors66 (n=115)61.5 (n=108)— (n=52)— (n=35)
Tilers70 (n=131)— (n=66)— (n=45)— (n=19)
Damp Proofing68.5 (n=101)— (n=95)— (n=48)— (n=14)
Guttering Services— (n=82)— (n=90)— (n=48)— (n=21)
Boiler Repairs— (n=97)— (n=67)— (n=16)— (n=13)
Landscape Gardeners— (n=75)— (n=69)— (n=23)— (n=12)
Chimney Sweeps— (n=67)— (n=65)— (n=40)— (n=10)
Bricklayers— (n=75)— (n=55)— (n=22)— (n=12)
Loft Conversions— (n=73)— (n=61)— (n=26)— (n=6)

A cell shows an em dash where that combination had too few websites with a mobile Performance score to publish a median. Its sample size is still shown, and where a cell has enough websites but too few scores, the number of scores is shown beside the dash. Nothing here is ranked and no difference is computed for the reader: the sites in each cell chose their platform, and the trade is the only thing held constant. Across this cohort the audit returned no mobile result for 50.5% of sites with no CMS detected, 3.4% of WordPress sites, 2.3% of Wix sites, 1.5% of Duda sites, so the medians in the "No CMS detected" column describe the sites that loaded, and the ones most likely to score badly are the ones most likely to be missing from them (C4).

Page builders inside WordPress

Page builders sit inside WordPress, so this is a smaller group again. Page-builder detection is only applied to WordPress websites, and a recognised third-party builder was found for only a subset of them. Everything here describes that subset.

  1. Among the WordPress websites with a mobile Performance score, the medians are 60 for Elementor (2,972 websites), 61 for Beaver Builder (397), 59 for Divi (1,311) and 57 for WPBakery (951). All four held when the collection waves were recalculated separately.
  2. A fifth group sits beside them and is not a page builder. “No third-party builder detected” means exactly that: the detector recognised no third-party builder. It is not evidence that the website used none. The group takes in WordPress’s own native block editor, which the detector reports on some of these websites and not on others, and any builder outside the set of fingerprints it holds. Its median is 65 across 4,058 websites and it held across the waves, but it is reported separately and kept out of the sequence above, because it is a residual rather than a tool anyone chose. Reading it as though it were one would turn an absence of evidence into a product comparison.
  3. Two builders are in the table with their sample size and no median: their cohorts fall below the 100 websites this report requires before it publishes one. They are shown rather than dropped, so the table says what exists as well as what can be measured.
  4. These are differences between groups of WordPress websites, not effects of the tools. Nothing was assigned; the websites in each group differ in ways this dataset did not observe, and the builder groups are drawn from different mixtures of trades, towns and collection waves. Detection also only recognises the builders it holds fingerprints for, so a website using something it does not know appears in the residual group.

Figure 8

Share of WordPress websites by third-party page builder

Share of WordPress websites with a mobile result. 6 of 6 cohorts are drawn as bars. Values run from 0.8% (Bricks) to 30.1% (Elementor). The axis runs from 0.0% to 50.0%.

  • Elementor30.1%

    n = 2,978

  • Divi13.3%

    n = 1,311

  • WPBakery9.6%

    n = 951

  • Beaver Builder4.0%

    n = 397

  • Oxygen1.0%

    n = 97

  • Bricks0.8%

    n = 83

Sample
9,887 WordPress websites with a mobile result — 32.4% of the 30,557 websites with a mobile result. 4,070 of them (41.2%) had no third-party builder detected; they are in the table, not the chart.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • CMS confidence is not a third level, and detector strength is not neutralSeverity: medium

    In this dataset the CMS Confidence value "low" is exactly equivalent to an undetected CMS — the two counts match to the row — so on the undetected sites confidence is not a third level. It is collapsed into a detector strength that is null whenever no CMS was found, and that identity is re-proved on every pipeline run. On identified sites, the detector's confidence level is retained rather than discarded. Every platform comparison in this report is therefore made twice: once across all identified websites and once within strong fingerprints only, so the result can be checked without relying on the weaker identifications. Only platform differences that satisfy the report's wave-sensitivity rules are quoted as findings. Differences between fingerprint-confidence strata are not treated as findings in this report.

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • Builder detection only covers WordPressSeverity: high

    A site builder is only ever identified on WordPress sites, which are 23.4% of all domains in the dataset. Every other domain — including every domain where no CMS was detected at all — is invisible to the builder analysis. Builder figures describe a subset of the dataset and must never be read as market share across UK trades websites generally.

  • The residual builder cohort is not a chosen toolSeverity: high

    Within WordPress, 4,213 domains (41.1%) carry no third-party page builder. They arrive in two ways — 3,347 where the detector reported nothing, and 866 where it reported WordPress's own block editor — and the split tracks the strength of the detector's fingerprint rather than anything about the site: of the block-editor rows, 866 came from a moderate detection and 0 from a strong one, against 184 and 3,163 for the rows where nothing was reported (builder-performance.json). The two are therefore one residual cohort — sites where nothing else was detected — rather than a group that selected a product, and the block-editor subset is never published as a cohort of its own. The residual is labelled "WordPress, no third-party builder detected", reported with its size and medians, shown outside the rank sequence, and never charted as a score.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

View as a table
Every builder cohort inside WordPress, the residual cohort last
BuilderShare of WordPressWebsites
Elementor30.1%2,978
Divi13.3%1,311
WPBakery9.6%951
Beaver Builder4.0%397
Oxygen1.0%97
Bricks0.8%83
WordPress, no third-party builder detected41.2%4,070

"WordPress, no third-party builder detected" is every WordPress website where the detector found no third-party page builder, whether it reported nothing or reported WordPress's own block editor. It is one residual cohort, not a product, so it is listed but not drawn (C13).

How the page builders compare

The same builders, with the lower and upper quartile beside each median so the spread behind it is visible. The residual cohort is listed last and outside any comparison, for the reason given above.

  1. A median is one point in a distribution. The interquartile ranges overlap substantially: the quartile columns show how far each builder’s middle half reaches, and those ranges sit across one another rather than in a line. A website in one group can therefore sit above the median of another, which is why the medians should not be read as clean dividing lines between builders. The quartiles are descriptive figures for this dataset pooled, were not recalculated inside the collection waves, and are not quoted outside this table.
  2. Each row also carries its own audit-failure rate and the number of websites behind each figure, and the counts are not the same from column to column: a website can return a Performance score without returning an LCP. Read the count in the row rather than the size of the cohort above it.
  3. Nothing in this table is ranked, and no row is a recommendation. These are groups of WordPress websites that differ in ways this dataset did not observe, drawn from different mixtures of trades, towns and collection waves.

Figure 9

Page builders, within WordPress only, with the spread behind each median

Builders inside WordPress, in sample-size order. Lower and upper quartile bracket the middle half of each cohort's mobile Performance scores.
BuilderLower quartileMedian mobile PerformanceUpper quartileMobile LCPWebsites
Elementor5560679.0s2,978
Divi5159668.3s1,311
WPBakery50576210.5s951
Beaver Builder5661668.7s397
Oxygen97
Bricks83
WordPress, no third-party builder detected5665756.7s4,070

"WordPress, no third-party builder detected" is one residual cohort of 4,070 sites: every WordPress site where the detector found no third-party page builder, whether it reported nothing or reported WordPress's own block editor. It is not a product anyone chose, so it is listed last and not compared with the others (C13). Builders are not ranked. A row with an em dash had too few websites for a median; its sample size is still shown.

Sample
9,887 WordPress websites with a mobile result — 32.4% of the 30,557 websites with a mobile result. Every other website is invisible to this table.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • These are laboratory measurementsSeverity: high

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

  • Builder detection only covers WordPressSeverity: high

    A site builder is only ever identified on WordPress sites, which are 23.4% of all domains in the dataset. Every other domain — including every domain where no CMS was detected at all — is invisible to the builder analysis. Builder figures describe a subset of the dataset and must never be read as market share across UK trades websites generally.

  • The residual builder cohort is not a chosen toolSeverity: high

    Within WordPress, 4,213 domains (41.1%) carry no third-party page builder. They arrive in two ways — 3,347 where the detector reported nothing, and 866 where it reported WordPress's own block editor — and the split tracks the strength of the detector's fingerprint rather than anything about the site: of the block-editor rows, 866 came from a moderate detection and 0 from a strong one, against 184 and 3,163 for the rows where nothing was reported (builder-performance.json). The two are therefore one residual cohort — sites where nothing else was detected — rather than a group that selected a product, and the block-editor subset is never published as a cohort of its own. The residual is labelled "WordPress, no third-party builder detected", reported with its size and medians, shown outside the rank sequence, and never charted as a score.

  • A small number of audits returned only some categoriesSeverity: low

    170 mobile and 140 desktop audits returned some category scores but not all, most often the static categories with no performance trace. They are counted in the denominator and contribute only the metrics they actually produced, so any given median may rest on slightly fewer rows than the cohort total. Each figure carries its own sample size.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

How the trades compare

Median mobile Performance by trade, in order of sample size rather than score. The table below is descriptive: it shows what each trade's websites did in this sample, and it is not a league table.

  1. No trade-level figure in this report was recalculated inside the two collection waves, so this section quotes none of them. That is a limit of the data rather than an oversight. Trade is the part of this dataset most entangled with the way it was gathered: the two waves covered different towns and different trades, so several trades exist almost entirely inside one of them and a wave test would compare a trade against itself.
  2. The trades are nothing like the same size, and the table keeps three tiers apart. 26 trades meet the report's 300-site threshold for ranking, although this section deliberately does not rank them by score. 35 trades hold at least 100 websites and carry a median. 2 fall below that and show their sample size alone. A trade of a few hundred websites and a trade of several thousand do not carry the same certainty, and the table shows the count beside every figure so the difference is visible.
  3. 2 of the trades large enough to order were collected almost entirely inside a single wave, so their medians are entangled with that wave's city set, collection design and other cohort differences. The table gives each trade's wave split, its WordPress share and its undetected-platform share in the same row as its median, because those are the mixtures a trade difference would have to be separated from before it could be called a trade difference.
  4. Trade labels are the source's own and are not merged. Carpenters and joiners are separate labels here, and so are gardeners and landscape gardeners; combining them would be an editorial judgement about trades rather than a correction to data. One consequence is visible in the table, where a label can sit below the reporting threshold while a close neighbour sits well above it.
  5. None of this attributes a score to a trade. A trade's websites differ from another's in platform mix, in who built them, in how old they are, in what the business needs to show, and in which towns and collection waves they were drawn from — none of which this study separated. And this is a seeded sample, so a figure in the table describes the websites of that trade in this sample and never that trade across the UK.

Differences between the trades are small relative to the spread of scores inside any one of them, and they co-vary with platform mix and collection wave, which we have not separated. No trade figure in this report was recalculated inside the collection waves, so the table below is descriptive and nothing in it is quoted as a finding. The chart is ordered by sample size, not by score.

Figure 10

Median mobile Performance score by trade, in order of sample size

Median mobile Performance. 26 of 26 cohorts are drawn as bars. Values run from 63 (Kitchen Fitters) to 72 (Handyman Services). The axis runs from 0 to 100, and a longer bar is a better result.

  • Plumbers68

    n = 4,761

  • Driveways66

    n = 1,528

  • Roofers67

    n = 1,394

  • Electricians68

    n = 1,341

  • Window Cleaners68

    n = 1,257

  • Builders67

    n = 1,167

  • Flooring Services65

    n = 946

  • Painters And Decorators69

    n = 908

  • Joiners67

    n = 872

  • Kitchen Fitters63

    n = 791

  • Domestic Cleaners69

    n = 736

  • Gas Engineers66

    n = 733

  • Gardeners67

    n = 645

  • Double Glazing64

    n = 607

  • Tree Surgeons66

    n = 597

  • Locksmiths68

    n = 590

  • Glaziers65

    n = 583

  • Carpet Cleaners69

    n = 537

  • Scaffolders66

    n = 530

  • Plasterers68

    n = 512

  • Bathroom Fitters65

    n = 483

  • Garage Doors66

    n = 429

  • Pest Control66

    n = 392

  • Washing Machine Repairs69

    n = 373

  • Handyman Services72

    n = 370

  • Fencing Contractors66

    n = 335

Sample
26 trades with a large enough sample to compare — ordered by how many websites each has, not by score. Each trade's median mobile LCP is in the table.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Two crawl waves with different audit-failure ratesSeverity: high

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

  • Trade labels are the source's, unmerged, and 17.7% are absentSeverity: medium

    7,740 domains carry no trade label in the source; they are reported as their own cohort rather than dropped or reassigned. Related labels that a reader might expect to be combined — carpenters and joiners, gardeners and landscape gardeners — are kept separate, because merging them is an editorial judgement about trades rather than a correction to the data.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

  • Trade is confounded with wave, city set and platform mixSeverity: high

    Across the 26 trades large enough to rank, the share of a trade's sites collected in the first wave runs from 14.0% to 98.6%, 2 trades are drawn at least 90% from a single wave, and the waves differ in city coverage, audit-failure rate and seed-list quality (C2). The share of sites on WordPress runs from 21.7% to 46.5% and the share with no detectable platform from 32.3% to 48.5%, and platforms differ in median mobile Performance (cms-performance.json). A difference between two trades is therefore a difference between two mixtures of towns, waves and platforms that this study has not separated. The spread of trade medians (63 to 72) is also small beside the spread within a trade: the pooled interquartile range of the same score is 58 to 81. Trade exhibits are ordered by sample size rather than by score, the table is not a league table, and this study does not measure why any trade's sites score as they do.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

View as a table
Every trade, with the mix of collection wave and platform behind each median
TradeMobile PerformanceMiddle halfMobile LCPWebsitesCollected in wave 1On WordPressNo platform detected
Trade not recorded6758–816.9s5,286100%32%35%
Plumbers6858–836.2s4,76198%32%43%
Driveways6657–807.3s1,52899%31%34%
Roofers6758–827.0s1,39445%31%37%
Electricians6859–826.1s1,34129%30%43%
Window Cleaners6858–846.2s1,25720%32%41%
Builders6758–797.1s1,16737%30%38%
Flooring Services6556–797.3s94626%36%39%
Painters And Decorators6959–846.4s90820%27%39%
Joiners6758–79.56.9s87221%27%38%
Kitchen Fitters6354–767.5s79124%37%38%
Domestic Cleaners6958–846.0s73617%26%45%
Gas Engineers6657–796.5s73322%33%41%
Gardeners6758–817.0s64526%29%39%
Double Glazing6454–737.5s60714%46%33%
Tree Surgeons6657–757.2s59726%40%32%
Locksmiths6857–846.0s59015%34%47%
Glaziers6556–757.3s58320%39%33%
Carpet Cleaners6959–865.7s53725%34%46%
Scaffolders6657–787.5s53028%38%32%
Plasterers6860–816.4s51230%30%35%
Bathroom Fitters6556–776.9s48326%35%38%
Garage Doors6656–807.2s42927%37%37%
Pest Control6656–806.8s39219%38%39%
Washing Machine Repairs6957–855.7s37336%22%49%
Handyman Services7260–875.0s37035%29%40%
Fencing Contractors6657–75.57.4s33524%32%34%
Tilers6858–866.5s27936%24%47%
Damp Proofing6556–797.1s27433%35%37%
Guttering Services6859–78.86.3s25423%35%32%
Boiler Repairs6856–86.36.1s20438%33%48%
Landscape Gardeners6656.5–777.0s20035%35%38%
Chimney Sweeps6659–796.5s19923%33%34%
Bricklayers7057–886.1s17434%32%43%
Loft Conversions6557.5–82.56.7s17227%35%42%
Tarmac Contractors6062%35%33%
Carpenters3868%29%50%

10 trades had too few websites to rank: those with at least 100 websites show their medians, the rest their sample size only. "Trade not recorded" (5,286 websites) is listed but is not a trade, so it is never compared. 2 trades were collected at least 90% in a single wave (Plumbers, Driveways), so their medians inherit that wave's city set and list quality (C2). Middle half is the range between the lower and upper quartile of the trade's mobile Performance scores. Descriptive, pooled, and not wave-tested: across the 26 trades large enough to place in an order, these medians run from 63 to 72, a spread of 9 points. The middle half of all websites with a mobile Performance score, whatever their trade, runs from 58 to 81 — a range of 23 points. The gap between trades is the smaller of the two.

Is there a difference between cities?

Every city with enough measured websites to report, with its sample size. They are not ranked, and the table sits collapsed beneath the note for anyone who wants to look up their own.

  1. No city-level figure in this report was recalculated inside the collection waves, so this section quotes none of them. The pipeline also declines to rank cities at all, whatever their sample size, and records that decision in the data rather than leaving it to the writing: the reason given is that the medians span too narrow a range for an order to mean anything.
  2. In the pooled descriptive table, that narrowness is the main pattern. Where a city has enough measured websites to carry a median at all, the medians sit close together, and they sit closest among the cities with the largest samples — the ones where a real difference would be easiest to see. The figures are in the table; the point is that there is no city story in this dataset to tell.
  3. The sample sizes were set by the collection design, not by the towns. 53 cities have at least 100 measured websites and carry a median; 75 more are listed with their sample size alone; and 56 cities fall below 30 websites and are not listed at all, together holding 786 websites. Only 16 cities reach 300 measured websites, and the cohorts below them are a fraction of that size rather than a gentle slope.
  4. The two collection waves covered very different places — 183 towns and cities in the first and 18 in the second — so most of the smaller cohorts here come from one wave only and carry that wave's collection design with them. A city's median also carries its own mix of trades and platforms, which is why the table shows the WordPress share and the audit-failure rate beside each figure.
  5. Nothing here shows that location explains how a website performs. Nobody was assigned a town. A city cohort is the businesses a seeded search happened to find there, with their own trades, platforms and websites, so a difference between two cities in this table is a difference between those two sets of websites and nothing more. It is not a regional result, and this sample cannot support one.

Across the 53 cities with enough measured websites to report, the median mobile Performance scores sit close together — and they sit closest among the best-sampled cities. We have not ranked them, because a table ordered on a difference that small would present noise as a result, and no city figure was tested across the collection waves. The figures are in the table below, with the range stated beneath it.

Figure 11

Every city with at least 30 measured websites

Show every city with at least 30 measured websites
City medians, in order of sample size — deliberately not ranked
CityMobile PerformanceMobile LCPOn WordPressAudit failedWebsites
London676.8s31%25%2,414
Manchester676.4s33%29%2,026
Birmingham676.7s33%31%1,754
Leeds676.6s34%31%1,520
Bristol666.9s34%29%1,341
Glasgow676.6s30%31%1,341
Liverpool696.3s31%32%1,267
Newcastle upon Tyne676.7s32%31%1,192
Sheffield666.7s30%30%1,166
Nottingham676.7s32%31%1,153
Southampton676.7s35%30%1,107
Edinburgh666.9s33%30%1,018
Leicester676.7s32%32%942
Norwich666.9s31%29%825
Cardiff676.4s30%33%818
Belfast657.5s35%32%712
Brighton657.1s36%23%223
Exeter667.3s32%30%198
Aylesbury667.1s37%29%197
Altrincham647.7s41%15%194
Guildford667.0s39%25%192
Bournemouth627.4s43%24%185
Reading676.6s32%30%167
Coventry666.4s34%29%162
Crawley667.0s32%28%152
Plymouth696.3s28%23%152
Bath667.5s37%30%151
Basildon667.5s32%33%135
Maidstone67.56.8s30%27%135
Crewe69.56.4s28%30%126
Ipswich696.4s30%29%126
Bedford657.8s29%31%124
Newcastle686.5s33%32%123
Luton657.2s26%30%121
Ashford686.8s32%25%119
Bradford666.2s37%30%119
Chelmsford638.2s36%27%119
Barnsley65.57.3s30%30%116
Chichester686.2s37%35%116
Darlington667.4s27%35%113
Portsmouth696.5s28%29%112
Harlow657.3s40%29%110
Hull696.4s27%26%109
Peterborough714.9s30%27%109
Eastbourne667.1s31%24%108
Barry64.57.4s25%35%106
Chester656.3s24%33%106
Colchester686.3s31%32%106
Burton upon Trent686.3s32%28%103
Cambridge686.6s31%24%102
Cheltenham696.8s39%33%102
Coatbridge667.8s38%32%102
Gloucester686.1s28%28%100
Blackburn29%34%98
Salisbury39%34%98
Kidderminster30%29%94
Bury St Edmunds33%28%91
Slough41%38%91
Lincoln42%33%90
Blackpool38%36%87
Northampton33%25%86
Derby30%29%84
Bolton39%33%83
Dunfermline33%33%83
Aberdeen23%24%81
Oxford36%35%81
Corby28%32%80
Shrewsbury27%31%77
Lichfield25%28%76
Durham23%33%75
Chesterfield31%24%74
Dundee27%27%74
Stevenage38%21%74
Newport33%28%73
Watford29%16%73
Canterbury31%31%71
High Wycombe39%28%70
Hertford28%31%68
Doncaster48%40%66
Preston39%35%66
Hemel Hempstead30%38%64
Middlesbrough38%33%64
Flint20%36%60
Wrexham41%26%59
Bangor21%37%57
Swansea24%33%55
Carlisle26%18%54
Wolverhampton44%36%54
Hereford30%30%53
Southend-on-Sea33%31%52
Great Yarmouth27%30%51
Stirling16%22%51
Bridgend26%38%50
Kings Lynn33%36%49
Swindon39%27%49
Worcester35%37%49
Grantham27%34%48
Llanelli38%32%48
Ayr23%34%43
Telford35%27%43
Barrow-In-Furness33%33%42
Folkestone29%28%41
Kettering39%27%41
Macclesfield44%32%41
Stockport37%34%41
York29%29%41
Leamington Spa28%26%40
Grimsby36%39%39
Sunderland31%33%39
Huddersfield32%31%38
Caerphilly16%24%37
Milton Keynes30%35%37
Penzance32%14%37
Scunthorpe30%34%37
Ballymena36%28%36
Stafford44%40%36
Bangor North Wales20%34%35
Boston29%41%35
Greenock29%40%35
Medway31%36%35
Kilmarnock35%39%34
Inverness24%30%33
Oldham42%40%33
Armagh34%20%32
Halifax32%35%31
Redditch42%31%31
Wakefield23%43%31
Knutsford33%38%30

A city shows an em dash where it has fewer than 100 measured websites; its sample size is still shown. 56 further cities, covering 786 websites, had fewer than 30 and are not listed. Descriptive, pooled, and not wave-tested: across these 53 cities the medians run from 62 to 71, a range of 9 points — and both ends of that range are small cohorts. Among the 16 cities with at least 300 measured websites the medians are closer still. Sample sizes were set by the collection design rather than by the towns: 16 cities clear 300 measured websites and the next largest cohorts are a fraction of that size. WordPress share and audit-failure rate are shown because a city's median carries its own mix of platforms and of websites that returned nothing.

Sample
53 cities with a published figure; 75 more listed with their sample size only, because they have fewer than 100 measured websites; 56 cities with fewer than 30 are not listed
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Two crawl waves with different audit-failure ratesSeverity: high

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

  • A seeded city sample, not a representative sample of the UKSeverity: high

    Sampling was seeded on a set of major cities: 16 cities contribute several hundred domains each, while the remainder form a long tail. The dataset is large, but it is not a random or weighted sample of UK trades businesses, and no figure here should be read as a national estimate. It describes the 31,030 audited websites in this dataset.

  • Cities are reported but not rankedSeverity: medium

    City-level medians are published in full, with sample sizes, but no city league table is produced. The spread between cities is too narrow relative to the sample to support an ordering, and a ranked table would present noise as a result.

  • Nothing was assigned: this is an observational studySeverity: high

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

  • The dataset holds every website attempted, and almost no figure uses that as its denominatorSeverity: high

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

What the data suggests

Six things the evidence in this report supports, and the readings it does not. Every figure here has appeared above with the number of websites behind it, and every one was recalculated inside both collection waves before it was published.

  1. The clearest repeated device gap in this dataset is on mobile performance, and it is consistent rather than occasional. On the 29,965 websites that returned a Performance score on both devices, 87.5% scored lower under the mobile strategy, a median of 18 points apart. On the 29,969 that returned an LCP on both, 99.5% recorded a higher one on mobile, a median of 5.1 seconds apart. Those comparisons use the same listed URLs under both strategies rather than two separate populations, which makes them stronger evidence of a within-site device difference than comparing independent mobile and desktop medians. The URL each request finally resolved to after redirects was not retained.
  2. The picture is dominated by a large middle rather than a small extreme tail. Half the 30,399 websites with a mobile LCP took 6.7 seconds or more, and 72.5% took over 4 seconds. Sorted into Lighthouse's own bands, 15.7% of the 30,397 websites with a mobile Performance score sit in the top band and 10.7% in the bottom one — 73.6% are in between. A reader looking for a scandal at the bottom of the table will miss where most of these websites actually are.
  3. Read a Lighthouse score comparatively, and as a laboratory result. Each measurement comes from one automated test of one listed URL, and the conditions the service applied were not recorded. It is not a measurement of what any visitor experienced, and it is not a judgement passed by a search engine. What it supports is comparison between websites collected through the same request pattern inside the same five-week window, which is how this report uses it.
  4. Platform is associated with a difference here, and this study cannot say what produced it. Among the websites whose platform we identified, the median mobile Performance score is 61 for WordPress (9,869 websites) and 69 for Wix (5,031); restricted to strong fingerprints it is 60 (8,374) against 67 (3,841); and in every one of the 12 trades with enough websites on both sides, the WordPress group is the lower of the two. The direction survives holding the trade constant, which is why the difference does not appear to be explained by trade mix alone. Why it is there at all is a question this dataset was never able to ask: nothing was assigned, and the businesses that choose each platform differ in ways it did not observe.
  5. A label is not a verdict on any individual website. The pooled descriptive tables show substantial variation within platform, builder and trade groups, with overlapping interquartile ranges. That is why their medians should not be treated as clean dividing lines between individual websites. The residual group of WordPress websites where no third-party builder was recognised is not a product and carries no recommendation either. The trade and city chapters are descriptive: no trade- or city-level performance measurement was wave-tested, so those pooled tables are not used to support claims about which trade or town performs better.
  6. What returned nothing is part of the evidence. 12,708 of the 43,738 websites attempted, 29.1%, produced no usable automated audit on either device. They are kept in the dataset rather than quietly dropped, because removing them would have made every failure rate look better and quietly narrowed the population every share describes. A failed automated audit is not evidence of a broken website, and the retained data does not establish why any individual page could not be measured.

What not to take from this

  • Not that these websites are bad. Lighthouse bands are Lighthouse's names for ranges of its own score, and most of these websites sit in the middle one.
  • Not that one platform is faster than another as a property of the platform. The difference is between groups of websites that chose their own platforms.
  • Not that visitors on a phone wait the gap we measured. These are two laboratory tests of the same listed address, not two audiences.
  • Not that location does or does not matter. The city table is descriptive and the sample was seeded on a set of towns, so it can neither support a regional result nor rule one out.
  • Not that any of this describes UK trades businesses as a whole. It describes the websites in this sample.

Methodology

How the sample was gathered, how each figure was calculated, and the decisions taken along the way. What was recorded about the conditions each audit ran under — and what was not — is set out in full beneath this.

  1. Websites were found through business listings on a UK online business directory, searched by trade and by town. Each listing's website field was reduced to a bare domain and de-duplicated, giving 43,738 websites, and every figure in this report describes some subset of those. Collection ran between 2026-07-30 and 2026-09-01 in two waves, which covered different towns and different trades; where a website was audited more than once, the most recent result is kept.
  2. Each website's listed URL was sent to Google's PageSpeed Insights API twice: once with its mobile strategy and once with its desktop strategy, asking for all four Lighthouse categories. The two results are kept independently, so a website that returned a mobile result and not a desktop one keeps the mobile one. Audits that returned some category scores and not others are kept too, contributing only the categories they produced. Attempts that returned nothing are kept in the dataset as missing measurements rather than deleted, which is why the failure rates in this report are rates rather than an absence.
  3. Platform detection was a separate request to each homepage, not part of the audit, and it recognises only the platforms it holds fingerprints for. Page-builder detection runs only inside WordPress. The trade and town attached to each website are the directory's own labels. Both are lowercased for grouping, and one trade spelling variant is mapped onto another — “roofer” is counted as “roofers”, which affects 116 of the websites attempted. Nothing else is mapped and no categories are combined: carpenters and joiners are separate labels here, as are gardeners and landscape gardeners. The published file carries each trade both as the directory recorded it and as normalised, so the mapping is visible rather than assumed.
  4. Medians are used throughout rather than averages, because the timing distributions have long right tails. Quantiles are computed by linear interpolation between the two nearest order statistics — the definition R calls type 7 — and are pinned to that one method so a figure cannot move because a different convention was used. Every figure is published with the number of websites that returned that particular measurement, and those counts differ from one another. 43,738 is the number of websites attempted. It is not used as a default denominator for Performance, timing or Lighthouse-category measurements: each of those uses the number of websites that returned that specific measurement. Attempt- and coverage-level figures — how often an audit returned nothing, how often a platform could be identified — do use 43,738, because that is genuinely their denominator.
  5. Three sample-size thresholds decide what may be published. A cohort of fewer than 30 websites is not listed; below 100 it is listed with its sample size and no median; and only at 300 is it treated as large enough to place in an order at all. A controlled comparison — one platform inside one trade — needs 100 websites in each cell, and the median must clear that on its own sample rather than the cell's.
  6. One rule decides which analytical results this report states as findings. Every performance, comparative or distributional figure promoted into the writing was recalculated independently inside each of the two collection waves, and only those that held across both are quoted; anything untested, or tested and not holding, stays in a table and is labelled descriptive. That rule governs analytical results, not every number on the page: sample counts, the thresholds above, provenance and other deterministic facts about the dataset carry no wave verdict, because there is nothing about them to be robust to. It is why the trade and city chapters quote no measurement at all — no trade- or city-level performance figure was wave-tested, so both remain descriptive pooled tables.
  7. The published dataset carries a pseudonymous identifier for each website in place of its domain, and no domain, URL or business name. Where a town-and-trade combination described fewer than 5 websites, that value is withheld and marked. One row could not be protected that way, because neither its town nor its trade was ever recorded, so it is omitted from the download: the internal dataset holds 43,738 websites and the published file 43,737 rows. Every figure in this report is computed from the internal dataset, so no statistic is affected. This is dataset 2026-09.2, and its checksum is below.

Every figure in this report was produced by one analysis pipeline from a single frozen dataset, and one command regenerates every number here. Nothing on this page is typed in by hand.

What is published: the anonymised dataset, one row per website, and the methodology below it. What is not: the source dataset, because it names 43,738 real businesses, and with it the analysis pipeline and the detailed QA record, which we retain privately so any figure can be reproduced and checked on request. The source dataset’s SHA-256 is 7736a4183c00ed8f15a00d9e2f0f5a05, so a copy can be confirmed as the one these figures came from.

Medians are used throughout rather than averages, because the distributions have long right tails and an average would follow the tail rather than the typical site. Every figure is published with the number of websites behind it. Cohorts too small to support a median are reported with their size and no figure, and are never placed in a league table.

Platform detection records how firmly it recognised a platform, from the fingerprint it found in the page’s own markup: a strong fingerprint is an unambiguous match, a moderate one a weaker signal. That strength is not assumed to be distributed at random across the websites, and the two strata do not behave alike, so every platform comparison in this report is made twice — once across all identified websites and once within strong fingerprints only — and is reported with the platform caveat attached. A difference that appeared only in the weaker stratum would not be quoted as a difference between platforms.

Why these figures differ from field-data studies

  • Other public studies of website speed report Largest Contentful Paint from Google's Chrome User Experience Report, and often report figures a good deal faster than the ones here. The two are not competing measurements of the same thing, and neither is a correction of the other.
  • This study is laboratory data. Every figure comes from one automated Lighthouse test of one listed URL, run twice through the PageSpeed Insights API — once with its mobile strategy and once with its desktop strategy — under conditions the service applied and did not report back to us.
  • The Chrome User Experience Report is field data. Google describes it as “a dataset that reflects how real-world Chrome users experience popular destinations on the web”, collected from real browsers according to browser settings that determine which users are eligible.
  • They also need not describe the same websites. Google states that not all origins or pages are represented in that dataset, and that the eligibility criteria require a page to be publicly discoverable and to have “a large enough number of visitors in order to create a statistically significant dataset”; the exact threshold is not published. This study is a long tail of local trades businesses, and it made no attempt to establish which of them meet that bar.
  • So a difference between the two is expected rather than surprising. A laboratory test and an aggregate of real visits measure different things, over populations that need not overlap. Nothing in this report says what these websites would look like measured in the field, because this study did not measure that.

Chrome UX Report overview (Google), page dated 2024-02-08, read 2026-09-02; Chrome UX Report methodology (Google), page dated 2024-06-20, read 2026-09-02

How the audits were run

The collector stored only the four category scores and six metric values from each PageSpeed Insights response, so most of the Lighthouse configuration that produced this dataset was never kept. Each condition below is marked retained, partly retained or not retained. Where a condition was not retained, what Google publishes about its service is given separately, with the page and the date it was read; that is what the provider says its service does, not an observation of these audits. Nothing is inferred to fill a gap.

Audit provider and requestRetained
Every audit was one request to Google's PageSpeed Insights API (version 5, runPagespeed) asking for the Performance, Accessibility, Best Practices and SEO categories, with a 90-second timeout on the collector's side. The collector kept only the four category scores and six metric values (largest contentful paint, cumulative layout shift, total blocking time, first contentful paint, speed index, time to interactive) from each response. Apart from the HTTP status of a failed response, and on a 400 the first 80 characters of the API's own error message — both kept as the row's error value — no other part of the response was stored.PageSpeed Insights API v5 reference, runPagespeed (Google), page dated 2024-09-03, read 2026-09-02
Lighthouse versionNot retained
The Lighthouse version that produced each audit was not retained: the collector discarded that field of every response. Google's release notes for the service record an update to Lighthouse 13.0 on 20 October 2025 and carry no later entry (page last updated 27 October 2025, read 2 September 2026) — but those notes do not record every point release, and the check run on 2 September 2026 came back as Lighthouse 13.4.1, a version the notes never mention. So the audits ran on some 13.x release and nothing recorded which. Neither the release notes nor the September check is an observation of the July to September audits, and a Lighthouse point release can change how a score is calculated.PageSpeed Insights release notes (Google), page dated 2025-10-27, read 2026-09-02
Form factor and device emulationPartly retained
Each website was requested once with strategy=mobile and once with strategy=desktop, and the mobile and desktop columns in the dataset are those two requests. Which emulated device and screen Google applied under each strategy was not retained. Google describes the mobile test as 'a mid-tier device (Moto G4) device on a mobile network' and the desktop test as 'an emulated-desktop with a wired connection'. The Lighthouse 13.4.1 source sets the mobile screen at 412 by 823 pixels at 1.75x scale and the desktop screen at 1350 by 940 at 1x. The check run on 2 September 2026 returned mobile screenshots 412 pixels wide and desktop screenshots 1,335 to 1,350 pixels wide, and a 'moto g power (2022)' Chrome user agent for mobile. That is what the runner returns now, not an observation of the July to September audits.About PageSpeed Insights (Google), page dated 2024-10-21, read 2026-09-02; Lighthouse v13.4.1 source: core/config/constants.js (screen emulation, user agents, default throttling method), read 2026-09-02; PageSpeed Insights API v5 reference, runPagespeed (Google), page dated 2024-09-03, read 2026-09-02
Throttling methodNot retained
Not retained, and not returned by the API: the configSettings block of a PageSpeed Insights response carries only the form factor, locale, channel and category list, with no throttling settings at all, so a collector that kept every response in full would still not hold this value. Google describes the service as analysing pages 'in a simulated environment'; Lighthouse's default throttling method is 'simulate', and its documentation says that setup 'matches the setup of PageSpeed Insights'. If that is what ran here, the timing figures are model estimates for a target connection rather than load times measured over a real one — but that is the provider describing its service, and no throttling setting was recorded for any audit in this dataset.PageSpeed Insights API v5 reference, runPagespeed (Google), page dated 2024-09-03, read 2026-09-02; About PageSpeed Insights (Google), page dated 2024-10-21, read 2026-09-02; Lighthouse v13.4.1 source: core/config/constants.js (screen emulation, user agents, default throttling method), read 2026-09-02; Lighthouse v13.4.1 documentation: docs/throttling.md, read 2026-09-02
CPU slowdownNot retained
Not retained, and not returned by the API. Google's release notes record that on 5 December 2024 'the CPU throttling factor for PageSpeed Insights has been adjusted to account for the low CPU performance benchmarks typical in PageSpeed Insights production environments'. The Lighthouse 13.4.1 preset for the hosted mobile service sets a 1.2x CPU slowdown multiplier; the hosted desktop preset selects the 'desktopDense4G' profile, whose multiplier is 1x, meaning no CPU slowdown. These are the provider's published settings, not values observed in this collection. The generic Lighthouse command-line default of 4x is a different setting and does not describe the hosted service.PageSpeed Insights release notes (Google), page dated 2025-10-27, read 2026-09-02; Lighthouse v13.4.1 source: core/config/lr-mobile-config.js (the hosted-service mobile preset), read 2026-09-02; Lighthouse v13.4.1 source: core/config/lr-desktop-config.js (the hosted-service desktop preset), read 2026-09-02; Lighthouse v13.4.1 documentation: docs/throttling.md, read 2026-09-02
Network conditionsNot retained
Not retained, and not returned by the API. Lighthouse's documentation gives its simulated mobile network throttling as 150 ms latency and 1.6 Mbps down / 750 Kbps up with no packet loss; separately, and about the throttling method rather than those numbers, it says simulated throttling 'matches the setup of PageSpeed Insights'. The hosted desktop preset names a 'desktopDense4G' profile. These are the provider's published settings for its own tooling, not values observed in this collection.Lighthouse v13.4.1 documentation: docs/throttling.md, read 2026-09-02; Lighthouse v13.4.1 source: core/config/lr-desktop-config.js (the hosted-service desktop preset), read 2026-09-02
Where the audit ranNot retained
Where Google ran each audit was not recorded. Google states that the test 'runs in a Google datacenter that can vary based on network conditions' and reports 'one of: North America, Europe, or Asia', so audits in this dataset may have run from different regions. The collector that sent the requests was run by the publisher from one machine in the UK; that is the operator's account of the run, not a value stored with the data.About PageSpeed Insights (Google), page dated 2024-10-21, read 2026-09-02
Runs per websiteRetained
One request per strategy per run, with no automatic retry. Where the API answered with a rate-limit response the row was dropped and the website was requested again in a later run, so some websites were requested more than once; five websites whose listed address carried a stray space after the scheme separator also slipped past the runner's 'already audited' check and were audited again on later runs. Where a domain has more than one row, the pipeline keeps the most recent (27 rows removed across 5 domains). Every figure in the report therefore rests on a single Lighthouse run per device, with the run-to-run variation a single run carries.
Redirects and the audited URLPartly retained
The address sent to the API was the website address as listed in the collector's source sheet, trimmed of whitespace. Google follows redirects and audits the page it arrives at; the final URL was not retained, so a row may describe a page other than the listed address, including a different host. The check run on 2 September 2026 showed this for one of the two websites checked: the API reported a redirect to a different host and a warning about it, neither of which the collector would have stored. The scheme in a listed address (http or https) is the source sheet's, not the scheme the page was finally served on, which is why the pipeline drops the listed address entirely.PageSpeed Insights API v5 reference, runPagespeed (Google), page dated 2024-09-03, read 2026-09-02
Collection dates and timezonePartly retained
Each row's 'Audited At' is the collector's local clock when the audit finished, stored without a timezone. The machine kept Europe/London time, and cross-checks against the collector's UTC-stamped session record place it at BST (UTC+01:00) throughout: the five retained run logs fix that offset at five points inside wave 2, and wave 1 rests on the session record alone, because no wave-1 run log survives. That is an inference from those checks, not a value in the data. Rows fall on seven local days: a 7-row test on 30 July 2026, wave 1 on 3 to 5 August (17,237 rows including the test), and wave 2 on 30 August to 1 September (15,491 rows). The pipeline emits every timestamp with an explicit +01:00 offset; nothing is converted.
What an error value meansRetained
An error value describes the collector's request to the API, not the website. 'Timed out' and 'connection error' mean the collector's own call to the API did not complete within 90 seconds or could not connect; the connection errors cluster in two short bursts, on 3 August 20:35 to 20:36 and on 30 August 15:05 to 15:09 and 15:24 to 15:25 (BST). 'HTTP 500' means the API answered with a server error whose body was not kept, so nothing is known about its cause. Where the API itself reported that it could not fetch, render or parse the page (its 400-class responses, labelled FAILED_DOCUMENT_REQUEST, NO_FCP or NOT_HTML), the collector wrote the row to a separate sheet: 11,037 of the 43,765 rows written across the two sheets (25.2%), 341 of which recorded no error on the other device and 331 of which carry a Performance score. Those rows are part of this dataset. An earlier version of it held only the audited sheet, which understated the failure rate and narrowed the population every share described; no script records how or when the two sheets were separated.
Platform detectionPartly retained
Platform detection (CMS and page builder) was a separate fetch of each homepage by the collector, with a 15-second timeout, redirects followed and the first 1 MB read. It was not part of the Lighthouse audit. For wave 2 it ran immediately before each website's audit; for wave 1 and the 30 July test it was back-filled in one session on 28 August 2026 (21:17 to 22:21 BST), 23 to 29 days after those audits. No per-row flag records which; rows audited before 28 August are the back-filled ones.
Where the website list came fromPartly retained
Websites were found through business listings on a UK online business directory, searched by the same tool. The tool's completion list records 756 trade-and-city pairs (35 trade categories in 16 cities, plus extended plumber and decorator searches), but it is a completion marker rather than a search log, so 756 is a floor: the data itself carries 848 distinct trade-and-city combinations. Each listing's website field was reduced to a bare domain and de-duplicated. The date each listing was collected and its position in the directory's results were not retained.
How the dataset left the collectorRetained
The dataset file is byte-identical to a CSV export of the collector's 'PSI Audit' sheet downloaded on 1 September 2026 at 18:58 BST (7,618,420 bytes, SHA-256 beginning c2441e07), and its 32 columns match the collector's column list exactly. The export wrote 5,510 timestamps with an unpadded hour, which the pipeline normalises. The 400-class rows were held in a second sheet, exported on 2 September 2026 (11,037 rows, SHA-256 beginning 4ecbf5aa); the two together are the dataset this study analyses. No script records how the two sheets came to be separated.

Checked on 2026-09-02

The collector's unchanged request code was run once more for one website from each wave, chosen as the smallest site identifier among websites scored on both devices in that wave, and this time the full API response was retained. Scores from the check were not compared with the original audits and are not used anywhere in this report.

The request code is byte-identical between the collector's only commit (31 July 2026 — the day after the 7-row test of 30 July, and before the 3 to 5 August bulk of wave 1) and its working copy on 2 September 2026. No intermediate version is retained, so continuity in between rests on those two points and on the session record. That record shows the runner script being written and repeatedly edited during collection, including on 28 August 2026 to add the platform-detection fetch and on 30 August 2026 to add a skip list; none of the recorded edits touches the request code, but a session record can only evidence edits made inside a recorded session, and the runner is untracked, so no version of it survives from the collection window itself. The check shows what the runner does now; it is not evidence of the conditions that produced the dataset.

  • Lighthouse 13.4.1 on all four responses.
  • configSettings: formFactor and emulatedFormFactor 'mobile' or 'desktop' matching the strategy sent; locale en-US; channel 'lr'; onlyCategories performance, accessibility, best-practices, seo.
  • No throttling settings, CPU multiplier, throttling method or screen-emulation block anywhere in the responses.
  • Host user agent HeadlessChrome 151 on Linux x86_64; network user agent 'moto g power (2022)' Chrome 151 Mobile for mobile and Macintosh Chrome 151 for desktop.
  • Full-page screenshots 412 pixels wide for mobile; 1,335 and 1,350 pixels wide for desktop.
  • The unchanged parser produced all four category scores and six metric values for both devices of both websites.
  • One website's listed address redirected to a different host; the API reported the final URL and a warning, which the collector would not have stored.
  • The environment block carries no region or location.

The evidence behind each line — the collector source, the retained run logs and the sheet snapshots — is listed in the published methodology. The collection evidence itself names real businesses, so it is held privately and shown on request rather than published.

Limitations

What this dataset cannot tell you, stated once and in full. Each of these also appears beside the findings it affects rather than only here.

  1. The sample was seeded on a set of towns and trades and is not a random or weighted sample of UK trades businesses. No figure here is a national estimate.
  2. The two collection waves differ in date, town set and trade mix at once, so a difference between them cannot be separated from the way the data was gathered.
  3. Each website was audited once per device. A single automated run carries run-to-run variation, and a repeat of the same page can land elsewhere.
  4. The exact historical service-side emulation, network and throttling configuration was not fully retained in the dataset, and neither was the Lighthouse version that produced these figures. The test-conditions table records exactly which conditions were retained, partly retained and not retained.
  5. The URL each request finally resolved to after redirects was not retained, so a row may describe a page other than the address that was listed.
  6. Platform detection recognises a closed set of fingerprints, so “no platform identified” means the detector recognised nothing rather than that a website has no platform. Those websites are also disproportionately the ones that returned no measurement, so the undetected group is selected rather than random.
  7. The platform and builder comparisons are observational. Nothing was assigned, there is no control group, and the businesses choosing each platform differ in ways this study did not observe.
  8. The trade and city chapters are descriptive pooled analyses. No trade- or city-level performance measurement was wave-tested, and neither table supports a conclusion about which trade or town performs better.
  9. The Accessibility, Best Practices and SEO categories are limited to what Lighthouse can test automatically. A high Accessibility score is not an accessibility audit, and the SEO category is not a measure of search visibility.
  10. A failed automated measurement is not evidence of a broken website, and the retained data does not establish why any individual page could not be measured.
  • C1

    Severity: High

    The seed URL scheme cannot support an HTTPS claim

    The source carries a Website URL column, but it records the URL as it appeared in the seed list rather than the URL that actually resolved. Its scheme therefore describes how the list was compiled, not whether a site serves HTTPS. The column is dropped from the canonical row entirely, and no HTTPS-adoption figure appears anywhere in this study.

    Applies to every figure in this report.

  • C2

    Severity: High

    Two crawl waves with different audit-failure rates

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

    Applies to every figure in this report.

  • C3

    Severity: High

    A seeded city sample, not a representative sample of the UK

    Sampling was seeded on a set of major cities: 16 cities contribute several hundred domains each, while the remainder form a long tail. The dataset is large, but it is not a random or weighted sample of UK trades businesses, and no figure here should be read as a national estimate. It describes the 31,030 audited websites in this dataset.

    Applies to every figure in this report.

  • C4

    Severity: High

    Sites with no detected CMS are partly sites the audit could not load

    The mobile audit fails on 51.3% of domains with no detected CMS, against 3.4% where a platform was identified. Platform detection was a separate fetch of the homepage, not part of the audit, but the two are not independent for all that: a site that did not answer the detector could not be fingerprinted, and a site that did not answer one request often did not answer the other. The undetected cohort is therefore selected, not random, and every per-platform row carries both its sample size and its own audit-failure rate so the selection is visible beside the medians rather than in a footnote. Detection also ran at a different time from the audit for the earlier wave: see the platform-detection row of the test conditions.

    Applies to: cms-share, cms-performance, builder-performance

  • C5

    Severity: Low

    The Source Tab column carries no information

    Source Tab holds the same value on every row in the source and is dropped. It is recorded here so its absence reads as a decision rather than an oversight.

    Applies to every figure in this report.

  • C6

    Severity: Medium

    CMS confidence is not a third level, and detector strength is not neutral

    In this dataset the CMS Confidence value "low" is exactly equivalent to an undetected CMS — the two counts match to the row — so on the undetected sites confidence is not a third level. It is collapsed into a detector strength that is null whenever no CMS was found, and that identity is re-proved on every pipeline run. On identified sites, the detector's confidence level is retained rather than discarded. Every platform comparison in this report is therefore made twice: once across all identified websites and once within strong fingerprints only, so the result can be checked without relying on the weaker identifications. Only platform differences that satisfy the report's wave-sensitivity rules are quoted as findings. Differences between fingerprint-confidence strata are not treated as findings in this report.

    Applies to: cms-share, cms-performance, controlled-comparisons, confidence-coverage, wave-sensitivity

  • C7

    Severity: High

    These are laboratory measurements

    Every figure comes from one Lighthouse run of one page, under device emulation, at one moment. Laboratory results describe how a page behaved under controlled conditions. They are not measurements of what visitors experienced, and the thresholds used here are reference points for interpreting a lab run, not an assessment against any third-party programme or a claim about search rankings. The audits ran on Google's servers, which the provider says may be in North America, Europe or Asia and vary per request; which one ran each audit was not recorded.

    Applies to every figure in this report.

  • C8

    Severity: Medium

    Time to Interactive largely restates Largest Contentful Paint

    Time to Interactive is exactly equal to Largest Contentful Paint on 32.8% of mobile results, and is never lower than it. Lighthouse resolves TTI to the later of its inputs, so on a page with no significant work after the main paint the two collapse together. TTI is published for completeness but carries little information independent of LCP, and it is not used for any headline.

    Applies to: metric-distribution, mobile-v-desktop, overview

  • C9

    Severity: Medium

    Speed Index partly restates First Contentful Paint

    Speed Index is exactly equal to First Contentful Paint on 26.0% of mobile results. Lighthouse derives Speed Index from how a page's appearance fills in over time, so on a page that reaches its final appearance in a single paint the two collapse together. Published for completeness; not used for any headline.

    Applies to: metric-distribution, mobile-v-desktop, overview

  • C10

    Severity: Medium

    Total Blocking Time and Layout Shift are concentrated at zero

    Total Blocking Time is exactly zero on 35.2% of mobile results and Cumulative Layout Shift on 45.6%. A median of a distribution with that much mass at zero reports the zero and hides the tail. Both are reported as a share-at-zero alongside upper percentiles rather than as a median alone.

    Applies to: metric-distribution, mobile-v-desktop, overview

  • C11

    Severity: Low

    The SEO category barely varies between devices

    Mobile and desktop SEO scores are identical on 95.1% of domains audited on both. The category is built largely from device-independent checks, so it is reported as a single figure rather than framed as a mobile-versus-desktop comparison.

    Applies to: mobile-v-desktop

  • C12

    Severity: High

    Builder detection only covers WordPress

    A site builder is only ever identified on WordPress sites, which are 23.4% of all domains in the dataset. Every other domain — including every domain where no CMS was detected at all — is invisible to the builder analysis. Builder figures describe a subset of the dataset and must never be read as market share across UK trades websites generally.

    Applies to: builder-performance, wordpress-builders

  • C13

    Severity: High

    The residual builder cohort is not a chosen tool

    Within WordPress, 4,213 domains (41.1%) carry no third-party page builder. They arrive in two ways — 3,347 where the detector reported nothing, and 866 where it reported WordPress's own block editor — and the split tracks the strength of the detector's fingerprint rather than anything about the site: of the block-editor rows, 866 came from a moderate detection and 0 from a strong one, against 184 and 3,163 for the rows where nothing was reported (builder-performance.json). The two are therefore one residual cohort — sites where nothing else was detected — rather than a group that selected a product, and the block-editor subset is never published as a cohort of its own. The residual is labelled "WordPress, no third-party builder detected", reported with its size and medians, shown outside the rank sequence, and never charted as a score.

    Applies to: builder-performance, wordpress-builders

  • C14

    Severity: Low

    A small number of audits returned only some categories

    170 mobile and 140 desktop audits returned some category scores but not all, most often the static categories with no performance trace. They are counted in the denominator and contribute only the metrics they actually produced, so any given median may rest on slightly fewer rows than the cohort total. Each figure carries its own sample size.

    Applies to every figure in this report.

  • C15

    Severity: Medium

    Trade labels are the source's, unmerged, and 17.7% are absent

    7,740 domains carry no trade label in the source; they are reported as their own cohort rather than dropped or reassigned. Related labels that a reader might expect to be combined — carpenters and joiners, gardeners and landscape gardeners — are kept separate, because merging them is an editorial judgement about trades rather than a correction to the data.

    Applies to: trade-performance, controlled-comparisons

  • C16

    Severity: Medium

    Cities are reported but not ranked

    City-level medians are published in full, with sample sizes, but no city league table is produced. The spread between cities is too narrow relative to the sample to support an ordering, and a ranked table would present noise as a result.

    Applies to: city-performance

  • C17

    Severity: High

    Nothing was assigned: this is an observational study

    Every business in this dataset chose its own platform, its own trade and its own town. The audit measured what already existed — there is no control group, no randomisation and no intervention. A gap between two cohorts is therefore a difference between the sites that sit in them, not a measure of what a platform did to a site. Businesses that pick one platform may differ from those that pick another in ways this dataset did not observe: what they spent, how old the site is, who built it. Every comparison here is reported as a difference between groups, and no figure in this study can say what would happen to a site that moved from one platform to another.

    Applies to every figure in this report.

  • C18

    Severity: High

    Trade is confounded with wave, city set and platform mix

    Across the 26 trades large enough to rank, the share of a trade's sites collected in the first wave runs from 14.0% to 98.6%, 2 trades are drawn at least 90% from a single wave, and the waves differ in city coverage, audit-failure rate and seed-list quality (C2). The share of sites on WordPress runs from 21.7% to 46.5% and the share with no detectable platform from 32.3% to 48.5%, and platforms differ in median mobile Performance (cms-performance.json). A difference between two trades is therefore a difference between two mixtures of towns, waves and platforms that this study has not separated. The spread of trade medians (63 to 72) is also small beside the spread within a trade: the pooled interquartile range of the same score is 58 to 81. Trade exhibits are ordered by sample size rather than by score, the table is not a league table, and this study does not measure why any trade's sites score as they do.

    Applies to: trade-performance, controlled-comparisons

  • C19

    Severity: High

    The dataset holds every website attempted, and almost no figure uses that as its denominator

    This dataset is every one of the 43,738 websites the study requested an audit for, including the 12,708 that returned no usable automated audit on either device. That is deliberate: an earlier version of this dataset held only the websites that returned a result, which made the failure rate look far lower than it was and quietly changed the population every share described. Keeping the failed attempts costs nothing in measurement — they carry no scores to average — and it makes the population honest. The consequence is that 43,738 is the number of websites attempted and almost never the right denominator. Every figure in this report is published with the number of websites that returned that particular measurement, and those counts differ from each other: 30,397 websites returned a mobile Performance score, 30,399 a mobile LCP, 30,557 at least one mobile category score. Read the n beside a figure, not the size of the dataset.

    Applies to every figure in this report.

When the audit returned nothing

Roughly three in ten attempts returned no usable automated audit. That is a failed measurement, not a broken website: the table separates the attempts where our own request to the audit service failed from the ones where the service itself reported that it could not produce a usable result for the page. Neither records why, and a website that could not be measured here may be perfectly serviceable to a visitor.

Figure 12

How often the audit returned nothing, and why

Why an attempt returned no usable audit, pooled across both collection waves
Reason givenReported byDeviceWebsitesOf that device's failures
The audit could not load the pageThe audit serviceMobile10,19977.4%
The audit could not load the pageThe audit serviceDesktop10,16477.4%
Could not connect to the audit APIOur requestDesktop1,98415.1%
Could not connect to the audit APIOur requestMobile1,98215.0%
The audit recorded no content paintedThe audit serviceMobile5584.2%
The audit recorded no content paintedThe audit serviceDesktop5254.0%
Server error from the audit API, body not keptOur requestDesktop2662.0%
Server error from the audit API, body not keptOur requestMobile2571.9%
Request to the audit API timed outOur requestDesktop1080.8%
Request to the audit API timed outOur requestMobile1040.8%
The response was not HTMLThe audit serviceDesktop790.6%
The response was not HTMLThe audit serviceMobile760.6%

Each row counts websites, per device, as a share of that device's failed attempts. “Our request” means the collector's own call to the audit API did not complete. “The audit service” means the request completed and the service reported that it could not return a usable result for that page — it does not say the website was unavailable to a visitor, and the reason was not recorded.

Audit outcomes by platform
PlatformMobile failedDesktop failedWebsites
No CMS detected51.3%51.1%24,379
WordPress3.5%3.5%10,249
Wix2.4%2.3%5,158
Duda1.9%2.6%1,839
GoDaddy Website Builder14.5%15.5%657
Squarespace2.7%2.1%624
Weebly1.6%4.3%257
Webflow3.1%3.6%223
Shopify7.5%4.8%146
Joomla4.2%3.5%144
Drupal1.6%1.6%62
Sample
43,738 websites attempted. An audit failure is a failed measurement, not a broken website: nothing here records why a page could not be loaded, and the message the audit service returned was kept only in part.
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Sites with no detected CMS are partly sites the audit could not loadSeverity: high

    The mobile audit fails on 51.3% of domains with no detected CMS, against 3.4% where a platform was identified. Platform detection was a separate fetch of the homepage, not part of the audit, but the two are not independent for all that: a site that did not answer the detector could not be fingerprinted, and a site that did not answer one request often did not answer the other. The undetected cohort is therefore selected, not random, and every per-platform row carries both its sample size and its own audit-failure rate so the selection is visible beside the medians rather than in a footnote. Detection also ran at a different time from the audit for the earlier wave: see the platform-detection row of the test conditions.

  • A small number of audits returned only some categoriesSeverity: low

    170 mobile and 140 desktop audits returned some category scores but not all, most often the static categories with no performance trace. They are counted in the denominator and contribute only the metrics they actually produced, so any given median may rest on slightly fewer rows than the cohort total. Each figure carries its own sample size.

How we tested these findings

Collection ran in two waves. Every headline was recalculated inside each one separately; anything that did not hold across both was not published as a headline.

Figure 13

Every headline, recalculated inside each collection wave

A figure that moved materially between the two waves is not published as a headline
FigurePooledWave 1Wave 2Verdict
Domains where a CMS was identified44.3%45.1%43.3%robust
Median Accessibility score, mobile898989robust
Median SEO score, mobile929292robust
Median Best Practices score, mobile818181robust
Median Largest Contentful Paint, desktop1.4s1.4s1.4srobust
Median Performance score, desktop909090robust
LCP over 4000 ms in the lab, mobile72.5%71.9%73.2%robust
Median Largest Contentful Paint, mobile6.7s6.7s6.7srobust
Performance mobile: Good (90-100)15.7%15.7%15.6%robust
Performance mobile: Needs improvement (50-89)73.6%73.9%73.2%robust
Performance mobile: Poor (0-49)10.7%10.3%11.2%robust
Median Performance score, mobile676767robust
Domains recording a higher LCP on mobile than desktop99.5%99.5%99.5%robust
Median mobile-minus-desktop LCP, domains with an LCP on both5.1s5.0s5.2srobust
Domains scoring lower on mobile than desktop for Performance87.5%88.2%86.8%robust
Median mobile-minus-desktop Performance score, domains audited on both-18-18-18robust
Wix share of domains whose platform was identified26.6%27.7%25.4%robust
WordPress share of domains whose platform was identified52.9%52.6%53.3%robust
WordPress minus Wix, median mobile Performance score-8-9-8robust
WordPress minus Wix, median mobile Performance score, strong fingerprint only-7-7-7robust
Median mobile Performance score, WordPress616161robust
Median mobile Performance score, WordPress, strong fingerprint only606060robust
Median mobile Performance score, Wix697069robust
Median mobile Performance score, WordPress, no third-party builder detected (within WordPress)656564robust
Median mobile Performance score, Wix, strong fingerprint only676767robust
Median mobile Performance score, Elementor (within WordPress)606060robust
Median mobile Performance score, Duda777875not used as a headline
Median mobile Performance score, Divi (within WordPress)595859robust
Median mobile Performance score, WPBakery (within WordPress)575757robust
Median mobile Performance score, Squarespace545355robust
Median mobile Performance score, Beaver Builder (within WordPress)616061robust
Trades where the WordPress median mobile Performance score is below Wix, of trades with enough websites on both100.0%100.0%100.0%robust
Sample
n = 43,738
Source
Websites for Tradespeople, "The State of UK Trades Websites 2026", dataset 2026-09.2. Lighthouse lab results via the PageSpeed Insights API.

Read this figure with

  • Two crawl waves with different audit-failure ratesSeverity: high

    The audit ran in two near-disjoint waves: 23,525 domains between 30 July and 5 August 2026 across 183 towns and cities, and 20,213 between 30 August and 1 September 2026 across 18 large cities, with only a handful of domains appearing in both. Its mobile audit-failure rate is 30.8% against 29.6%, the share of its domains with no detectable platform is 56.7% against 54.9%, and among those undetected domains the failure rate is 53.0% against 49.9%. The waves therefore differ in date, city set, trade mix and list quality at once, so a gap between them cannot be told apart from the way the data was collected, and it must not be read as a difference between the websites. Platform share is the figure most exposed: it is quoted as a share of the sites that could be identified, with both wave figures beside the pooled one (cms-share.json). Every pooled figure is tested against the wave split before publication; see wave-sensitivity.json.

Download the data

The dataset behind every figure on this page, with the methodology that produced it beside it. This report, its analysis and the statistics derived from the data are CC BY 4.0; the row-level file's terms are set out below.

  1. One row per website: its town, its trade as the directory recorded it, the platform we identified if we identified one, and every Lighthouse score and timing the audit returned on each device — including the rows where it returned nothing, which are kept as missing measurements rather than dropped. No domain, no URL and no business name is in the file.
  2. Cite it as: Websites for Tradespeople (2026), "The State of UK Trades Websites 2026", https://www.websitesfortradespeople.co.uk/research/state-of-uk-trades-websites-2026. This report, its analysis, its charts and the statistics derived from the data are published under CC BY 4.0: republish, reuse and build on them freely, with credit. The row-level file also contains factual fields taken from the source directory listings (each website's town and trade). We have not established that those may be relicensed, so no licence is asserted over the file and it is not being distributed while we confirm the redistribution terms. Every figure on this page is reproducible from the aggregate artefacts and the methodology, both of which are published in full. If you quote a figure, quote the number of websites beside it — every figure in this report carries one, and they differ from figure to figure.
  3. The methodology sits in the provenance panel at the top of this page and sets out how the sample was gathered, how each figure was calculated, which test conditions were retained and which were not, and why these numbers are not directly comparable with studies built on actual visits. The checksum below identifies the exact version of the row-level file that every figure here was computed from.

The anonymised row-level dataset: 43,737 rows and 33 columns, one row per website. No domains, no business names.

Report licence
CC BY 4.0
Rows
43,737
Checksum
8c69490f1c3d15fa

The anonymised row-level dataset is temporarily unavailable while we confirm redistribution terms for source-derived listing fields. The report, methodology and aggregate findings remain available.

Please cite as: Websites for Tradespeople (2026), "The State of UK Trades Websites 2026", https://www.websitesfortradespeople.co.uk/research/state-of-uk-trades-websites-2026

For journalists and researchers

Everything in this report is free to quote with attribution, and there is no embargo. What follows is what you need to quote it accurately.

  1. Quote the sample size with the figure, because the sample sizes are not the same. 43,738 websites were attempted; a Performance, timing or category measurement rests only on the websites that returned it, and those counts differ from figure to figure. Attempt- and coverage-level figures — how often an audit returned nothing, how often a platform could be identified — do rest on all 43,738. A figure quoted without its n is a figure someone else gets to characterise.
  2. Two distinctions the report keeps, and we would ask you to keep. These are laboratory measurements from an automated test, not a record of what visitors experienced. And they are observational: where two groups of websites differ, that is a difference between those groups, not evidence that a platform, trade or town produced it.
  3. Analytical findings promoted in the writing use results that held across both collection waves. Dataset counts, thresholds and provenance facts are structural facts and do not require a wave verdict. The tables carry more than the writing does, and anything in a table the prose does not quote is labelled descriptive.
  4. Charts may be screenshotted and reproduced with attribution; each one carries its title, its sample size and its source line, so a lifted image still says what it is. There is no separate image pack — every chart on this page is drawn as text and vector, so it stays sharp at any size.
  5. For a figure we have not published, a cut of the data we have not shown, or a question about method, write to us at hello@websitesfortradespeople.co.uk. If a figure here is wrong we will correct it in public, with the date and what changed.

Corrections and versions

This is dataset 2026-09.2. Its audits were collected between 2026-07-30 and 2026-09-01; the version identifies the analysis those audits went through, and neither date is the date this report was published. The report is generated from that version, and it will be corrected in public if it is wrong.

  1. Every figure on this page is read from the dataset at build time. A corrected figure means a new dataset version, a new build and a dated note here — never a number edited by hand.
  2. A material numerical change is recorded here with its date, what changed and why. A cosmetic fix to wording does not create a new dataset version unless it changes how a figure should be read.
  3. Earlier dataset versions keep their checksums, which are published with each release, so anything quoted from an earlier version can still be identified and checked against the version it came from. Where a superseded file is still held, it is available on request.
  4. If you believe a figure, a label or a method is wrong, write to us at hello@websitesfortradespeople.co.uk.

Questions people ask about these scores

Six questions readers arrive with, and what this study can and cannot say about each.

What is a good PageSpeed score?
Lighthouse draws the lines at 90 and 50: 90 to 100 is good, 50 to 89 needs improvement, below 50 poor. Those are Lighthouse's definitions. What this study adds is where real websites fell — a median of 67 on mobile across 30,397 websites, with 15.7% in the good band.
Why is a mobile score lower than a desktop one?
In this dataset it nearly always is: 87.5% of the 29,965 websites scored on both devices scored lower on mobile. Why is not something this study measured — the conditions the audit service applied were not recorded, and nothing about page weight, hosting or layout was collected.
What is a good LCP?
Google publishes reference thresholds of 2.5 seconds and 4 seconds for Largest Contentful Paint. In this sample the median mobile LCP was 6.7 seconds across 30,399 websites, and 72.5% were over 4 seconds. The thresholds are reference points for reading a result, not a pass mark.
Why do these figures differ from studies based on actual visits?
Because the two measure different things, over populations that need not overlap. This study is one automated laboratory test per listed URL; studies of that other kind aggregate visits to websites that meet their own inclusion criteria. Neither corrects the other. The methodology sets the difference out in full, and names the dataset involved.
Does a Lighthouse SEO score show how well a website ranks?
No. It is a set of automated checks for a subset of technical and on-page basics that Lighthouse can test. It does not measure search visibility, and a high score says nothing about how a search engine ranks the page.
Is WordPress slower than Wix?
Not a question this study can answer. What it can say is that among the websites whose platform we identified, the WordPress group had a lower median mobile Performance score than the Wix group — 61 across 9,869 websites against 69 across 5,031 — and that the direction held inside every one of the 12 trades with enough websites on both sides. That is a difference between two groups of websites that chose their own platforms, not a property of either platform.

Know the price before you call

Three quick questions and you'll have a fixed price and a timescale. No sales calls, no pressure.

Call 0161 399 4659Get my website plan