We ran Google PageSpeed Insights on 30 Kenyan business websites last month. The average mobile score was 34 out of 100. The average load time on a Safaricom 4G connection was 8.2 seconds.
Your visitors are not waiting that long. They are already on your competitor's site.
CloudSpinx is a web development and hosting provider based in Nairobi, Kenya. We build and optimize websites for businesses across East Africa. The performance problems we see are almost always the same six things, and most of them can be fixed in a weekend.
This is not one of those "speed matters" articles that tells you obvious things. This is the specific list of problems we find on every Kenyan business website we audit, with exact fixes and the real numbers behind them.
Why Speed Matters More in Kenya Than in Europe
A slow website in Germany is annoying. A slow website in Kenya is expensive for your visitors. Literally.
Safaricom charges per MB on most data plans. When your homepage is 8MB because of uncompressed images and three JavaScript frameworks, you are asking visitors to spend their data on your slow page. Many will not. They will close the tab and find a lighter alternative.
Consider the numbers:
- 78% of Kenyan web traffic comes from mobile devices
- Average Safaricom 4G speed in Nairobi: 15-25Mbps (good areas), 5-10Mbps (everywhere else)
- Average Safaricom 4G speed in Mombasa, Kisumu, Nakuru: 8-15Mbps
- Airtel 4G is typically 20-30% slower than Safaricom in most areas
- Google's own data: 53% of mobile users abandon sites that take longer than 3 seconds to load
Three seconds. That is your budget. And most Kenyan business websites blow through it before the hero image finishes loading.
Problem 1: Your Server Is in Virginia
This is the single biggest speed killer we see, and most business owners do not know about it.
When a Kenyan user visits your website, their browser connects to your server. If that server is in the US (us-east-1 on AWS, for example), the data has to travel across the Atlantic and back. That is about 300-400ms of latency before a single byte of your website loads.
Move that server to a South African data centre (AWS af-south-1 in Cape Town, or Azure South Africa North in Johannesburg) and latency drops to 60-80ms. Host it on a CDN with an edge node in Nairobi and you are looking at 10-20ms.
The difference is visible. Not "measurable with tools" visible. Visible to a person clicking a link and watching the page appear.
Fix: Put Cloudflare in front of your website. The free tier is genuinely enough for most SME websites. Cloudflare has edge servers in Nairobi and Mombasa, which means your static content (images, CSS, JavaScript) loads from a server that is physically close to your visitors. Our hosting team configures this as standard for every site we manage.

Problem 2: Your Images Are Enormous
This is the quickest win. Every time.
Most websites we audit have hero images that are 2-5MB each. Product images that are 1MB when they could be 80KB. Background images saved as PNG when they should be WebP.
A real example from a Nairobi e-commerce site we optimized last quarter:
| Image | Before | After | Savings |
|---|---|---|---|
| Hero banner | 3.2MB (JPEG) | 145KB (WebP) | 95% |
| Product thumbnails (each) | 890KB (PNG) | 42KB (WebP) | 95% |
| About page team photo | 4.1MB (PNG) | 210KB (WebP) | 95% |
The homepage went from 11.4MB to 1.1MB. Load time dropped from 9.3 seconds to 2.8 seconds on Safaricom 4G.
Fix for existing images:
# Convert images to WebP using cwebp
cwebp -q 80 input.jpg -o output.webp
# Batch convert all JPEGs in a directory
for f in *.jpg; do cwebp -q 80 "$f" -o "${f%.jpg}.webp"; done
# Resize to max width (most screens don't need 4000px wide images)
convert input.jpg -resize 1600x -quality 85 output.jpg
Fix in your HTML:
<picture>
<source srcset="/images/hero.webp" type="image/webp">
<source srcset="/images/hero.jpg" type="image/jpeg">
<img src="/images/hero.jpg" alt="Description" loading="lazy" width="1600" height="900">
</picture>
That loading="lazy" attribute is free performance. Images below the fold do not load until the user scrolls to them. Zero effort, significant impact.
Problem 3: Font Loading Gone Wrong
Google Fonts is wonderful until you load six weights of Inter plus three weights of a display font. We see this constantly in WordPress themes.
Each font weight is a separate HTTP request and typically 20-40KB. Load eight font files and you have added 200-300KB and 8 network requests before your text even renders.
Fix: Limit yourself to two font weights maximum. Regular and bold. That covers 95% of use cases.
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
The display=swap part is critical. Without it, your page shows invisible text until the font loads. With it, the browser shows system fonts immediately and swaps in the custom font when it arrives. Your users see content instantly instead of staring at a blank page.
Even better: self-host your fonts and include them in your CSS. Eliminates the DNS lookup and connection to Google's servers entirely.
Problem 4: JavaScript Bloat
That WordPress theme with 47 plugins. The React single-page app that ships 2MB of JavaScript before showing a company profile page. The analytics scripts, chat widgets, and social media embeds that each add their own bundle.
We audited a Kenyan real estate site last month. The homepage loaded 4.3MB of JavaScript. For a page that displays property listings and a contact form. The jQuery library was loaded three times because three different plugins each included their own copy.
Fix: Audit your JavaScript. In Chrome DevTools, open the Coverage tab (Ctrl+Shift+P, type "coverage"). Load your page. The red bars show JavaScript that was downloaded but never executed. On most WordPress sites, 60-80% of the JavaScript is unused.
For WordPress specifically:
- Remove plugins you are not actively using (not just deactivated, removed)
- Replace heavy plugins with lightweight alternatives (you do not need a 500KB slider plugin when CSS can do it)
- Use a caching plugin like WP Super Cache or W3 Total Cache
- Consider WP Rocket if you can justify KES 6,500/year for the license
For custom-built sites, talk to your web development team about code splitting and lazy loading JavaScript modules.

Problem 5: No Caching Headers
When someone visits your website, their browser downloads everything: HTML, CSS, JavaScript, images. If they visit again tomorrow, should the browser download everything again? Obviously not. But without proper caching headers, that is exactly what happens.
Nginx caching configuration:
location ~* \.(jpg|jpeg|webp|png|gif|ico|css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
location ~* \.html$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
}
Static assets (images, fonts, CSS, JS) get cached for a year. HTML gets cached for an hour. When you update your site, change the filename or add a version query string to bust the cache.
If you are on Cloudflare (and you should be), it handles most of this automatically. But setting proper origin headers means even Cloudflare can cache more efficiently.
Problem 6: No Compression
Your server should be gzipping (or better, Brotli-compressing) every text-based response. HTML, CSS, JavaScript, JSON, SVG. This typically reduces file sizes by 70-80%.
Nginx gzip configuration:
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml;
A 200KB JavaScript file becomes 50KB over the wire. A 100KB CSS file becomes 20KB. Free performance, no downsides.
Real Case Study: Nairobi E-Commerce Site
Last quarter we optimized a Kenyan e-commerce site selling electronics. Here are the actual numbers.
Before optimization:
- PageSpeed Mobile Score: 28
- First Contentful Paint: 4.8 seconds
- Largest Contentful Paint: 9.1 seconds
- Total page weight: 11.4MB
- HTTP requests: 127
- Time to Interactive: 12.3 seconds
After optimization:
- PageSpeed Mobile Score: 89
- First Contentful Paint: 1.1 seconds
- Largest Contentful Paint: 2.3 seconds
- Total page weight: 1.1MB
- HTTP requests: 34
- Time to Interactive: 3.2 seconds
What we changed:
- Moved to Cloudflare (free tier) for CDN and edge caching
- Converted all images to WebP with lazy loading
- Removed 31 unused WordPress plugins
- Replaced the theme's 4 JavaScript sliders with a single CSS-only carousel
- Added proper caching headers on the origin server
- Enabled Brotli compression
- Self-hosted the two Google Fonts they actually used
Business impact over the following month:
- Bounce rate dropped from 68% to 41%
- Average session duration increased from 1:20 to 3:45
- Mobile conversion rate went from 0.8% to 2.1%
- The site started ranking on page 1 for three target keywords that had been stuck on page 2
The increase in sales paid for the optimization within two weeks.
Core Web Vitals: What Google Actually Measures
Google uses three metrics to judge your site's performance. These directly affect your search rankings.
Largest Contentful Paint (LCP): How long until the main content is visible. Target: under 2.5 seconds. This is usually your hero image or main heading. Fix your images and server location, LCP improves dramatically.
First Input Delay (FID) / Interaction to Next Paint (INP): How long until the page responds to user interaction. Target: under 200ms. Heavy JavaScript is the usual culprit. If clicking a button takes a noticeable moment before anything happens, you have an INP problem.
Cumulative Layout Shift (CLS): How much the page jumps around as it loads. Target: under 0.1. Those moments where you are about to tap a link and the page shifts and you tap an ad instead. Set explicit width and height on images and reserve space for dynamic content.
Check your scores at PageSpeed Insights and WebPageTest. Run the test from a server location close to your users, not from Virginia.

When to Optimize vs When to Rebuild
Optimization makes sense when your site has good content and decent design but poor technical performance. Most WordPress sites fall into this category. The content is valuable, the structure is fine, but the implementation is slow.
Rebuilding makes sense when:
- Your WordPress site has 50+ plugins and nobody knows what half of them do
- The theme is a purchased template from 2019 that has not been updated
- Your site is not mobile-responsive (yes, we still see this in 2026)
- The core business requirements have changed and the site architecture does not support them
If you are rebuilding, consider a static site generator like Astro or even plain HTML for brochure sites. A static site served from Cloudflare's edge is almost impossible to make slow. Our web development team builds sites on modern frameworks that score 90+ on PageSpeed out of the box.
For most businesses, though, optimization gets you 80% of the way there at 20% of the cost. Start with the six fixes in this post. If your scores are still below 70 after implementing all of them, then consider a rebuild.
Need help figuring out where your site stands? We offer free 15-minute website performance audits. Send your URL to [email protected] and we will run the numbers.
Frequently Asked Questions
How do I check my website's speed right now?
Go to PageSpeed Insights and enter your URL. It will give you a score out of 100 for both mobile and desktop, plus specific recommendations. For more detailed analysis, use WebPageTest and select a test location in South Africa (closest available to Kenya).
Is Cloudflare really free?
Yes. The free tier includes CDN caching, DDoS protection, SSL certificates, and basic analytics. It is genuinely enough for most SME websites. The Pro plan at USD 20/month adds more features, but most businesses do not need them. We configure the free tier for all our hosting clients by default.
Will optimizing speed actually improve my Google rankings?
Yes. Google has confirmed that page speed is a ranking factor, especially on mobile. More importantly, faster sites have lower bounce rates and higher engagement, both of which indirectly improve rankings. The e-commerce site in our case study started ranking for keywords it had been stuck on page 2 for, within a month of optimization.
How much does website optimization cost in Kenya?
It depends on how much needs fixing. A speed optimization for an existing WordPress site is significantly cheaper than a full redesign and rebuild on a modern stack. Optimization is almost always the better starting point unless your site has fundamental structural problems. Reach out to our web team for a free assessment and quote.
My developer says the site is fast. PageSpeed says it is slow. Who is right?
PageSpeed is right. Your developer is probably testing on a MacBook Pro connected to fast office WiFi. PageSpeed simulates a mid-range phone on a 4G connection, which is how most of your Kenyan visitors actually experience your site. Always test on the conditions your real users have, not on your ideal setup.
Does hosting location really matter that much?
Massively. Moving from a US-hosted server to one with a CDN edge in Nairobi can cut initial page load time by 300-500ms. That does not sound like much, but it compounds across every resource your page loads (HTML, CSS, JS, images, fonts). The total impact is often 1-3 seconds faster load time. For a cloud infrastructure setup, we always recommend South African or Nairobi-edge hosting for Kenya-focused businesses.
Should we use AMP (Accelerated Mobile Pages)?
No. Google deprecated AMP as a ranking requirement in 2021. A well-optimized regular website performs just as well and gives you full control over design and functionality. AMP was always a workaround for slow sites, not a solution. Fix your actual speed issues instead.
What is the single most impactful speed improvement we can make?
Compress your images and add Cloudflare. These two changes alone will cut most Kenyan business websites from 8+ seconds to under 4 seconds. Total cost: KES 0 (Cloudflare free tier) plus 2-3 hours of work converting images to WebP. Start here before doing anything else.
Download: Your Business Website Is Slower Than Your Competitor's: Here Is Why (and What to Do About It)
Enter your work email. We'll send the PDF download link to your inbox.