The fastest websites in South Africa
Every month we rank South Africa's biggest websites by the experience real visitors get: loading, stability and responsiveness on their phones, from Google's public Chrome UX Report field data.
Spotlight: South Africa e-commerce
PageSpeed hands out a green light or a red one. It can't tell you what a real person hits once the page loads. Each month we deep-scan one sector's leaders.
- 1 critical and 6 serious accessibility barriers on the live page. Real blockers for people using a screen reader or keyboard, and invisible to any speed score.
- 3.7 MB down the wire per page load. Heavy going on the mobile connections most of its visitors are on.
- A bleed index of 30/100: a measurable share of real visitors getting a worse experience than the headline speed suggests.
The live page loading on a simulated mid-range phone over Slow 4G (Lighthouse capture). 3.0s to settle.
- 3 critical and 6 serious accessibility barriers on the live page. Real blockers for people using a screen reader or keyboard, and invisible to any speed score.
- 2.3 MB down the wire per page load. Heavy going on the mobile connections most of its visitors are on.
- A friction index of 39/100: the taps, shifts and waits a real person meets, which Google's field speed data smooths over.
The live page loading on a simulated mid-range phone over Slow 4G (Lighthouse capture). 5.1s to settle.
- 2 critical and 2 serious accessibility barriers on the live page. Real blockers for people using a screen reader or keyboard, and invisible to any speed score.
- 2.4 MB down the wire per page load. Heavy going on the mobile connections most of its visitors are on.
- A friction index of 32/100: the taps, shifts and waits a real person meets, which Google's field speed data smooths over.
The live page loading on a simulated mid-range phone over Slow 4G (Lighthouse capture). 12.5s to settle.
Movers and shakers
Since the September edition
Newly clearing Google's bar
Biggest climbers
New number ones
How editions are compared
Compared with the September edition: Chrome UX Report data from real mobile visitors for 8 Sep to 5 Oct, against 10 Aug to 6 Sep. Only sites measured the same way in both editions are compared, each counted once. A change counts when a Core Web Vital moved by at least 10% and at least 0.2s (load time), 25ms (tap response) or 0.02 (layout shift); a site got better when one moved that much the right way and none the wrong way. Measured speed only, not traffic, conversions or revenue.
E-commerce
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1 | LCP2.3s | INP151ms | Data/visitn/a | Pass | ||
| 2 | LCP2.1s | INP227ms | Data/visit2.2MB | 2/3 | ||
| 3 | LCP2.2s | INP222ms | Data/visit2.6MB | 2/3 | ||
| 4 | LCP3.4s | INP392ms | Data/visit4.3MB | 1/3 | ||
| 5 | LCP3.5s | INP254ms | Data/visit11.7MB | 1/3 | ||
| 6 | LCP3.8s | INP292ms | Data/visit0.4MB | 1/3 | ||
| 7 | LCP4.2s | INP280ms | Data/visit14MB | 1/3 | ||
| 8 | LCP3.4s | INP329ms | Data/visit6MB | 0/3 | ||
| 9 | LCP6.7s | INP685ms | Data/visit4.8MB | 0/3 | ||
| 10Up 1 place: #11 with data from 10 Aug to 6 Sep; #10 with data from 8 Sep to 5 Oct. | LCP7.4s | INP643ms | Data/visit0.4MB | 0/3 | ||
| 11Up 1 place: #12 with data from 10 Aug to 6 Sep; #11 with data from 8 Sep to 5 Oct. | LCP9.4s | INP323ms | Data/visit4.3MB | 0/3 | ||
| 12Down 2 places: #10 with data from 10 Aug to 6 Sep; #12 with data from 8 Sep to 5 Oct. | LCP10.0s | INP675ms | Data/visitn/a | 0/3 | ||
| 13 | LCP10.6s | INP1074ms | Data/visitn/a | 0/3 |
1 more sites without enough real-user data to rank
Fintech
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1Up 1 place: #2 with data from 10 Aug to 6 Sep; #1 with data from 8 Sep to 5 Oct. | LCP2.1s | INP361ms | Data/visit0.5MB | 2/3 | ||
| 2Down 1 place: #1 with data from 10 Aug to 6 Sep; #2 with data from 8 Sep to 5 Oct. | LCP2.7s | INP197ms | Data/visit2.6MB | 2/3 | ||
| 3 | LCP3.0s | INP180ms | Data/visit2.5MB | 2/3 | ||
| 4 | LCP3.9s | INP181ms | Data/visit2.6MB | 2/3 | ||
| 5Up 6 places: #11 with data from 10 Aug to 6 Sep; #5 with data from 8 Sep to 5 Oct. | LCP3.9s | INP192ms | Data/visit7.3MB | 2/3 | ||
| 6Down 1 place: #5 with data from 10 Aug to 6 Sep; #6 with data from 8 Sep to 5 Oct. | LCP2.9s | INP367ms | Data/visit5.7MB | 1/3 | ||
| 7Down 1 place: #6 with data from 10 Aug to 6 Sep; #7 with data from 8 Sep to 5 Oct. | LCP3.5s | INP409ms | Data/visit2.4MB | 1/3 | ||
| 8Up 1 place: #9 with data from 10 Aug to 6 Sep; #8 with data from 8 Sep to 5 Oct. | LCP3.6s | INP286ms | Data/visit3.7MB | 1/3 | ||
| 9Down 1 place: #8 with data from 10 Aug to 6 Sep; #9 with data from 8 Sep to 5 Oct. | LCP3.6s | INP304ms | Data/visit7.3MB | 1/3 | ||
| 10Up 3 places: #13 with data from 10 Aug to 6 Sep; #10 with data from 8 Sep to 5 Oct. | LCP3.6s | INP1487ms | Data/visit5.5MB | 1/3 | ||
| 11Down 4 places: #7 with data from 10 Aug to 6 Sep; #11 with data from 8 Sep to 5 Oct. | LCP3.8s | INP306ms | Data/visit3.6MB | 1/3 | ||
| 12Down 2 places: #10 with data from 10 Aug to 6 Sep; #12 with data from 8 Sep to 5 Oct. | LCP4.5s | INP479ms | Data/visit3.3MB | 1/3 | ||
| 13Down 1 place: #12 with data from 10 Aug to 6 Sep; #13 with data from 8 Sep to 5 Oct. | LCP5.3s | INP427ms | Data/visit3.7MB | 1/3 |
Restaurants
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1 | LCP1.9s | INP130ms | Data/visitn/a | Pass | ||
| 2Up 3 places: #5 with data from 10 Aug to 6 Sep; #2 with data from 8 Sep to 5 Oct. | LCP2.1s | INP194ms | Data/visitn/a | Pass | ||
| 3Down 1 place: #2 with data from 10 Aug to 6 Sep; #3 with data from 8 Sep to 5 Oct. | LCP1.2s | INP166ms | Data/visitn/a | 2/3 | ||
| 4Down 1 place: #3 with data from 10 Aug to 6 Sep; #4 with data from 8 Sep to 5 Oct. | LCP1.7s | INP279ms | Data/visit2.5MB | 2/3 | ||
| 5Down 1 place: #4 with data from 10 Aug to 6 Sep; #5 with data from 8 Sep to 5 Oct. | LCP2.1s | INP320ms | Data/visit5.1MB | 2/3 | ||
| 6 | LCP3.4s | INP171ms | Data/visit8.5MB | 2/3 | ||
| 7 | LCP9.8s | INP164ms | Data/visit3.6MB | 2/3 | ||
| 8 | LCP3.9s | INP324ms | Data/visit2.5MB | 1/3 | ||
| 9 | LCP6.7s | INP406ms | Data/visitn/a | 1/3 | ||
| 10 | LCP4.6s | INP329ms | Data/visit8.1MB | 0/3 | ||
| 11 | LCP7.6s | INP522ms | Data/visit3.8MB | 0/3 |
3 more sites without enough real-user data to rank
Professional services
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1 | LCP1.4s | INP92ms | Data/visit2.2MB | Pass | ||
| 2 | LCP2.0s | INP104ms | Data/visit5.4MB | Pass | ||
| 3 | LCP2.2s | INP128ms | Data/visit1.6MB | Pass | ||
| 4 | LCP2.4s | INP241ms | Data/visit4.3MB | 2/3 | ||
| 5 | LCP2.7s | INP82ms | Data/visit3.9MB | 2/3 | ||
| 6 | LCP2.8s | INP136ms | Data/visit31MB | 2/3 | ||
| 7Up 1 place: #8 with data from 10 Aug to 6 Sep; #7 with data from 8 Sep to 5 Oct. | LCP3.5s | INP158ms | Data/visit3.5MB | 2/3 | ||
| 8Up 1 place: #9 with data from 10 Aug to 6 Sep; #8 with data from 8 Sep to 5 Oct. | LCP3.6s | INP139ms | Data/visit2.3MB | 2/3 | ||
| 9Down 2 places: #7 with data from 10 Aug to 6 Sep; #9 with data from 8 Sep to 5 Oct. | LCP3.7s | INP194ms | Data/visit7.4MB | 2/3 | ||
| 10 | LCP4.3s | INP111ms | Data/visit1.9MB | 2/3 | ||
| 11 | LCP4.6s | INP188ms | Data/visit6.9MB | 2/3 | ||
| 12 | LCP5.4s | INP138ms | Data/visit8.1MB | 2/3 | ||
| 13 | LCP3.8s | INP217ms | Data/visit4.9MB | 1/3 |
1 more sites without enough real-user data to rank
Banking
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1 | LCP3.4s | INP545ms | Data/visit25.6MB | 1/3 | ||
| 2 | LCP3.6s | INP521ms | Data/visitn/a | 1/3 | ||
| 3Up 3 places: #6 with data from 10 Aug to 6 Sep; #3 with data from 8 Sep to 5 Oct. | LCP3.6s | INP297ms | Data/visit1.8MB | 1/3 | ||
| 4Down 1 place: #3 with data from 10 Aug to 6 Sep; #4 with data from 8 Sep to 5 Oct. | LCP3.9s | INP272ms | Data/visit7.6MB | 1/3 | ||
| 5Down 1 place: #4 with data from 10 Aug to 6 Sep; #5 with data from 8 Sep to 5 Oct. | LCP4.9s | INP386ms | Data/visit1.8MB | 1/3 | ||
| 6Up 1 place: #7 with data from 10 Aug to 6 Sep; #6 with data from 8 Sep to 5 Oct. | LCP6.5s | INP261ms | Data/visit2.7MB | 1/3 | ||
| 7Up 1 place: #8 with data from 10 Aug to 6 Sep; #7 with data from 8 Sep to 5 Oct. | LCP7.5s | INP433ms | Data/visit7.4MB | 1/3 | ||
| 8Up 1 place: #9 with data from 10 Aug to 6 Sep; #8 with data from 8 Sep to 5 Oct. | LCP8.4s | INP347ms | Data/visit13.9MB | 1/3 | ||
| 9Up 1 place: #10 with data from 10 Aug to 6 Sep; #9 with data from 8 Sep to 5 Oct. | LCP4.2s | INP280ms | Data/visit3.6MB | 0/3 | ||
| 10Down 5 places: #5 with data from 10 Aug to 6 Sep; #10 with data from 8 Sep to 5 Oct. | LCP4.7s | INP547ms | Data/visitn/a | 0/3 | ||
| 11 | LCP5.6s | INP654ms | Data/visit7.2MB | 0/3 |
Insurance
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1Up 1 place: #2 with data from 10 Aug to 6 Sep; #1 with data from 8 Sep to 5 Oct. | LCP2.1s | INP339ms | Data/visit1.2MB | 2/3 | ||
| 2Up 1 place: #3 with data from 10 Aug to 6 Sep; #2 with data from 8 Sep to 5 Oct. | LCP2.3s | INP236ms | Data/visit2.7MB | 2/3 | ||
| 3Up 6 places: #9 with data from 10 Aug to 6 Sep; #3 with data from 8 Sep to 5 Oct. | LCP2.4s | INP371ms | Data/visit3.2MB | 2/3 | ||
| 4Up 2 places: #6 with data from 10 Aug to 6 Sep; #4 with data from 8 Sep to 5 Oct. | LCP2.5s | INP313ms | Data/visit2.3MB | 2/3 | ||
| 5Up 5 places: #10 with data from 10 Aug to 6 Sep; #5 with data from 8 Sep to 5 Oct. | LCP2.5s | INP273ms | Data/visit3.6MB | 2/3 | ||
| 6Down 5 places: #1 with data from 10 Aug to 6 Sep; #6 with data from 8 Sep to 5 Oct. | LCP2.7s | INP178ms | Data/visit1.8MB | 2/3 | ||
| 7Down 3 places: #4 with data from 10 Aug to 6 Sep; #7 with data from 8 Sep to 5 Oct. | LCP3.1s | INP145ms | Data/visit0.4MB | 2/3 | ||
| 8Down 3 places: #5 with data from 10 Aug to 6 Sep; #8 with data from 8 Sep to 5 Oct. | LCP2.6s | INP348ms | Data/visit3.6MB | 1/3 | ||
| 9Down 1 place: #8 with data from 10 Aug to 6 Sep; #9 with data from 8 Sep to 5 Oct. | LCP2.8s | INP245ms | Data/visit15.4MB | 1/3 | ||
| 10Down 3 places: #7 with data from 10 Aug to 6 Sep; #10 with data from 8 Sep to 5 Oct. | LCP2.9s | INP244ms | Data/visit2.1MB | 1/3 | ||
| 11Up 2 places: #13 with data from 10 Aug to 6 Sep; #11 with data from 8 Sep to 5 Oct. | LCP3.6s | INP292ms | Data/visit5.2MB | 1/3 | ||
| 12 | LCP3.8s | INP341ms | Data/visit3.3MB | 1/3 | ||
| 13Down 2 places: #11 with data from 10 Aug to 6 Sep; #13 with data from 8 Sep to 5 Oct. | LCP3.9s | INP315ms | Data/visit6.4MB | 1/3 | ||
| 14 | LCP4.3s | INP241ms | Data/visit1.7MB | 1/3 | ||
| 15 | LCP4.5s | INP384ms | Data/visit21.4MB | 1/3 | ||
| 16 | LCP4.5s | INP553ms | Data/visitn/a | 1/3 | ||
| 17Up 1 place: #18 with data from 10 Aug to 6 Sep; #17 with data from 8 Sep to 5 Oct. | LCP8.6s | INP536ms | Data/visitn/a | 1/3 | ||
| 18Up 1 place: #19 with data from 10 Aug to 6 Sep; #18 with data from 8 Sep to 5 Oct. | LCP3.2s | INP288ms | Data/visit2.6MB | 0/3 | ||
| 19Up 1 place: #20 with data from 10 Aug to 6 Sep; #19 with data from 8 Sep to 5 Oct. | LCP4.4s | INP289ms | Data/visit4.3MB | 0/3 | ||
| 20Down 3 places: #17 with data from 10 Aug to 6 Sep; #20 with data from 8 Sep to 5 Oct. | LCP5.4s | INP329ms | Data/visit5.9MB | 0/3 | ||
| 21 | LCP5.6s | INP654ms | Data/visit7.2MB | 0/3 |
Media
| Rank | Site | LCP | INP | Core Web Vitals | Data/visiti | Status |
|---|---|---|---|---|---|---|
| 1 | LCP1.5s | INP102ms | Data/visit4.4MB | Pass | ||
| 2 | LCP2.0s | INP149ms | Data/visit3.2MB | Pass | ||
| 3 | LCP2.2s | INP185ms | Data/visit2.7MB | Pass | ||
| 4 | LCP2.3s | INP159ms | Data/visit3.2MB | Pass | ||
| 5Up 1 place: #6 with data from 10 Aug to 6 Sep; #5 with data from 8 Sep to 5 Oct. | LCP1.9s | INP405ms | Data/visit6.1MB | 1/3 | ||
| 6Down 1 place: #5 with data from 10 Aug to 6 Sep; #6 with data from 8 Sep to 5 Oct. | LCP2.6s | INP226ms | Data/visit2.3MB | 1/3 | ||
| 7 | LCP2.9s | INP309ms | Data/visit5.2MB | 1/3 | ||
| 8 | LCP3.1s | INP256ms | Data/visit3.2MB | 0/3 |
6 more sites without enough real-user data to rank
How we rank
No black box. The order is a rule you can check, on data anyone can pull.
- The order
- Ranked by how many Core Web Vitals meet Google's "good" threshold on real mobile visitors, then by loading speed. The same for every site.
- The data
- Google's Chrome UX Report, the same real-user field data Google uses for Search. Origin-level, mobile, over a shared 28-day window.
- Data per visit
- Lighthouse total-byte-weight, what a homepage load transfers (the figure PageSpeed reports), from HTTP Archive's September 2026 monthly mobile crawl. It does not change the ranking. It reads n/a where HTTP Archive has not crawled the site or Lighthouse did not measure it. 1 MB here is 1,048,576 bytes, the same bytes PageSpeed reports as KiB.
- Who's in
- The largest sites in each sector with enough real-user traffic to report. Sites without enough data are named, not ranked.
- What it isn't
- Speed and page weight only. Nothing about traffic, conversions or revenue, and an origin-level view of big brands, not the whole African web.
Get the monthly index
Once a month: how Africa's biggest sites are really performing, the trends behind the board, and the deep evidence the leaders are judged on. Free.
October 2026 edition, updated monthly. Ranking uses Google's Chrome UX Report field data: real mobile visitors, origin-level, over a shared 28-day window. Data per visit is Lighthouse total-byte-weight, the transfer figure PageSpeed reports, from HTTP Archive's September 2026 mobile crawl of the homepage; a proxy for a typical page rather than the exact bytes any one visitor loads, and shown only where Lighthouse measured the origin. The monthly Spotlight adds Stroma's own point-in-time deep scans of the live pages (accessibility, page weight and our composite indices). Measured speed and page weight only; nothing about traffic, conversions or revenue, and an origin-level view of major brands, not the whole African web. Independent measurement, not affiliated with or endorsed by Google or HTTP Archive.