Free AI Visibility Audit
Blog

Why Is My Website Slow? 8 Hidden Causes I Found on My Own Site

· 11-minute read
8 causes · shikha.io1,695 KB → 73 KB41 images and 2 fonts hidden in the code, and 6 more causes I found.
On this page

My homepage looked fine. It loaded fine on my laptop. It also weighed 1,695 KB, and only 37 KB of that was the actual page.

Key takeaways

  • My homepage was 1,695 KB because 41 images and 2 fonts were pasted into the page as code. Moving them into their own files took it to 73 KB, and 23 KB once compressed.
  • Fonts do affect page speed. Mine added about 100 KB, and once moved, they made the page jump by up to 208 px while loading. A size-matched fallback font cut that to 13 px.
  • Always test in an incognito window. The same page scored 87 in a normal window and 99 in incognito.
  • Speed is a foundation, not a ranking hack. My SEO score went from 92 to 100 because of a meta description and schema, not speed.

If you are asking why your website is slow, the cause usually hides in how the page is built, not in how it looks. Slow sites rarely look slow to their owners.

I am Shikha Kumari, an AI SEO expert, and in October 2026 I ran a full speed audit on my own site. Below are the 8 causes I found, how to check each one in 2 minutes, and what fixing it did, in real numbers.

Does page speed affect SEO?

Yes, but less than most people think. Google's ranking systems reward a good page experience, including Core Web Vitals, but Google is clear that a great experience does not beat a more relevant answer. Speed works like a tie-breaker between pages that answer the question equally well.

Where speed really costs you is before rankings even matter. A visitor on a phone who waits 4 seconds for your main image often leaves before reading a word. That is a lost lead, whatever position you hold.

When my homepage's Lighthouse SEO score went from 92 to 100, speed had nothing to do with it. The page was missing a meta description and structured data. Speed and SEO basics are separate jobs, and you need both. Whether AI engines can read and quote your page is a third job, which you can test with my AI Citation Validator.

Core Web Vitals explained in simple terms

Core Web Vitals are the 3 numbers Google uses to judge how a page feels to a real visitor. Think of them as loading, stability and response.

LCP Largest Contentful Paint Good: 2.5 seconds or less

How long until the main thing on the first screen appears, usually the hero image or headline.

You open a page and stare at a blank space where the photo should be. That wait is LCP.

CLS Cumulative Layout Shift Good: 0.1 or less

How much the page moves around while it loads.

You go to tap "Book a call", the page jumps, and you tap something else. That jump is CLS.

INP Interaction to Next Paint Good: 200 milliseconds or less

How fast the page reacts when you tap, click or type.

You tap "Menu" and nothing happens for a second, so you tap again. That delay is INP.

One catch: Lighthouse loads the page but never taps anything, so it cannot measure INP. It shows Total Blocking Time instead, which flags the same problem in the lab. For INP from real visitors, open the Core Web Vitals report in Google Search Console.

The other 3 numbers Lighthouse shows

These are not Core Web Vitals, but Lighthouse scores them, and each one points to a different problem.

FCP First Contentful Paint Good: 1.8 seconds or less

How long until anything at all appears: the first line of text, the logo, a background colour.

You open a page and the screen stays white. The moment something shows up is FCP.

TBT Total Blocking Time Good: 200 milliseconds or less

How long code keeps the page frozen while it loads, so it cannot respond to taps.

The page looks ready, you tap the menu, and nothing happens because a script is still running. That frozen time is TBT.

SI Speed Index Good: 3.4 seconds or less

How quickly the visible screen fills in, on average, not just when the first or biggest thing arrives.

One page shows the headline, photo and button almost together. Another shows them one by one over 4 seconds. The first has the better Speed Index.

The "good" numbers for these 3 are Lighthouse's mobile thresholds.

How to check your website speed with Lighthouse (always in incognito)

Lighthouse is Google's free page test, built into Chrome. It takes about 2 minutes.

  1. Open Chrome in incognito: Cmd+Shift+N on a Mac, Ctrl+Shift+N on Windows. Extensions are switched off there by default.
  2. Open your page with the plain address, with nothing like #contact on the end.
  3. Right-click anywhere and choose Inspect, or press Cmd+Option+I (Mac) or Ctrl+Shift+I (Windows).
  4. Click the Lighthouse tab. If you cannot see it, click the >> arrows next to the tabs.
  5. Choose Mobile, tick Performance, Accessibility, Best Practices and SEO, then click Analyze page load.
  6. Read the 4 scores, then the 5 metric tiles below them.
  7. Click View Treemap to see what your page is made of.

Why incognito matters: Chrome extensions run inside the test and their code counts against your page. One of my resource pages scored 87 in a normal window and 99 in incognito, with no change to the page.

Lighthouse report for shikha.io on mobile showing Performance 90, Accessibility 95, Best Practices 100 and SEO 100
shikha.io in Lighthouse, mobile, October 2026: Performance 90, Accessibility 95, Best Practices 100, SEO 100.

My 5 metric tiles, read with the plain-words guide above:

  • First Contentful Paint (FCP): mine is 1.1 s.
  • Largest Contentful Paint (LCP): mine is 3.6 s, still orange. More on this in Cause 3.
  • Total Blocking Time (TBT): mine is 50 ms.
  • Cumulative Layout Shift (CLS): mine is 0.001.
  • Speed Index (SI): mine is 1.1 s.

Watch LCP and CLS more than the overall score. They are the 2 a visitor actually feels.

Lighthouse metric tiles for shikha.io with the View Treemap button highlighted
The 5 metric tiles, with View Treemap highlighted. Click it to see every piece of code your page loads.

How to read a Lighthouse treemap (what all those blocks mean)

The treemap shows every piece of code your page makes a visitor download. Three rules are enough to read it:

  • Each block is one file.
  • A bigger block means more code to download and run.
  • Blocks inside blocks mean that file is assembled from many smaller packages.
Lighthouse treemap for shikha.io showing two large blocks for Google Tag Manager and Google Analytics
A lean page: shikha.io. 341.8 KiB of scripts in 2 blocks, both Google tracking (Tag Manager and Analytics). The page's own script is 14 KB.
Lighthouse treemap for a website-builder blog post showing dozens of nested script blocks
A heavy page: a blog post on a popular website builder. 1.2 MiB of scripts in dozens of nested blocks: the builder's framework, animation libraries, a comment widget and Facebook tracking. Site address removed.

The second page makes every visitor download about 3.5 times more code than mine before they read a word. Most of it is not the blog post. It is the machinery around it.

How to act on it: start with the biggest block and ask one question. Does this earn its place? Tracking pixels, chat widgets and plugins installed once for a single feature are the usual suspects.

Cause 1: Images and fonts pasted inside your page code

This was the biggest problem on my site, and it is invisible unless you open the page code.

When I opened my homepage file, only 37 KB of it was the page itself: the words, the layout, the links. The other 1,658 KB was 41 images and 2 fonts converted into text, a format called base64, and pasted into the HTML.

AI page builders and some website builders do this because it keeps everything in one file. It has 3 costs:

  • The browser reads the file top to bottom before it can show what comes later. My hero photo sat 421 KB deep.
  • Nothing gets cached. A returning visitor downloads all of it again.
  • Every image arrives at once, including the ones nobody scrolls to.

2-minute check: open your page, right-click, choose View Page Source, press Cmd+F and search for base64. If you find long blocks of random letters, your images are living inside your code.

The fix: move every image and font into its own file. My 41 images became separate files, and the 5 that appeared twice now load once. The page went from 1,695 KB to 73 KB.

Cause 2: Images bigger than the screen needs

The client logos on my homepage were stored 120 pixels tall and shown 21 pixels tall. Every visitor downloaded about 6 times the pixels they could see.

The rule: save each image at 2 to 3 times its displayed size. That stays sharp on high-resolution phones and laptops, and goes no bigger. Then convert it to WebP. Resizing and converting took my image weight from about 1.1 MB to 424 KB.

Cause 3: Your main image loads last (how to improve Largest Contentful Paint)

Largest Contentful Paint measures when the biggest thing on the first screen appears. On most founder websites, that is the hero photo.

Mine was a 191 KB JPEG, 1,400 pixels wide, buried 421 KB down the page file. On Lighthouse's mobile test it took 5,030 milliseconds to appear.

  1. Make 3 sizes, so phones get a small file: mine are 18 KB, 41 KB and 98 KB, and the browser picks the right one.
  2. Tell the browser to fetch it first, with a preload line in the page head.
  3. Set its width and height, so the space is reserved before it arrives.

In my desktop test, the hero now starts downloading at 0.34 seconds and is fully painted at 0.93 seconds.

Where I am honestly not done: on Lighthouse's slower mobile test my LCP is still 3.6 s, above Google's 2.5 s line, and Lighthouse flags 110 KB of image savings left. That is my next fix, and I will update this post with the result.

Cause 4: Does font affect page speed? Yes, here is by how much

Yes. Every font family and weight is a file the visitor downloads before the text looks right. Here is what mine cost, measured.

My 2 brand fonts were pasted into the page's styles as code, about 100 KB of it. Moved into their own files they are 41 KB and 35 KB, downloaded once and reused by every page on the site.

A myth worth retiring: you will still read that Google Fonts load instantly because visitors already have them cached from other websites. Since Chrome 86 in October 2020, every website gets its own cache. Your visitor downloads your fonts from scratch, wherever they are hosted.

  • Use 2 font families at most. Each extra family or weight is another download.
  • Use the WOFF2 format. It is the smallest.
  • Host the files yourself and preload them, so they start downloading with the page.

I kept my brand fonts. They are part of how my site looks and sounds. The goal is not the fewest fonts. It is fonts that load without hurting the page.

Cause 5: Your page jumps while loading (how to fix Cumulative Layout Shift, CLS)

Fixing Cause 4 created a new problem.

While a font downloads, the browser shows a system font, then swaps. My brand font sits taller on each line, so when it arrived the whole page grew. On a phone it grew by 208 pixels, and anyone who landed on my contact form watched it slide down the screen. Lighthouse scored the shift at 0.236. Google's "good" CLS is 0.1 or less.

The common advice, font-display: swap, does not fix this. Swap is what causes the jump: it shows the fallback, then replaces it.

The fix is a fallback font reshaped to take up the same space as the brand font, using size and line-height overrides in CSS. The swap still happens. The lines no longer move.

Screen widthPage movement beforeAfter
375 px phone208 px13 px
412 px phone186 px41 px
1,280 px desktop114 px21 px

Setting a width and height on every image stops the other common jump, images pushing text down as they load. My homepage CLS is now 0.001.

Cause 6: Everything loads at once, even what nobody sees

My homepage has about 30 client logos and testimonial photos below the first screen. They all downloaded the moment the page opened.

Lazy loading tells the browser to fetch an image only when the visitor scrolls near it. It is one attribute: loading="lazy".

One exception: never lazy-load anything on the first screen, especially the hero image. That makes LCP worse.

Cause 7: Your hosting does not compress or cache

Hosting is usually the first thing people blame. On my site, hosting was not the main problem. The build was.

Two hosting settings still matter:

  • Compression: my 73 KB homepage travels as 23 KB.
  • Caching: images, fonts and icons are kept by the browser for a year, so returning visitors download them once.

2-minute check: right-click, Inspect, open the Network tab, reload, click your page and read the Response Headers. You want content-encoding (br or gzip), and a cache-control with a long max-age on your images.

I moved from Hostinger to Vercel because it does both by default and publishes every change in under a minute. Any good host can do the same.

Cause 8: Tracking scripts, and the trade-off I chose

Look back at my treemap. The 2 biggest blocks are Google Tag Manager and Google Analytics, about 342 KB of scripts.

There is a trick to make them disappear from the test: load tracking only after the visitor's first click or scroll. Lighthouse never clicks, so the score jumps.

I did not do it. Every visitor who reads without clicking would vanish from Analytics. I would be trading real data for a better-looking lab number. My homepage still scores 90 on mobile with tracking in place.

My rule: every script has to earn its place. Analytics earns it. A chat widget nobody uses, a pixel from an ad campaign that ended last year, or a plugin installed for one feature usually does not.

The before and after, in one table

CauseWhat I foundFixResult
1. Assets inside the code41 images and 2 fonts in the HTMLSeparate files1,695 KB to 73 KB
2. Oversized imagesLogos stored at 120 px, shown at 21 px3x display size, WebP1.1 MB to 424 KB
3. Slow main image191 KB hero, 5,030 ms3 sizes plus preloadPainted at 0.93 s (desktop)
4. FontsAbout 100 KB inside the page2 shared WOFF2 files, preloaded76 KB, downloaded once
5. Layout jumpCLS 0.236Size-matched fallback fontsCLS 0.001
6. Everything at onceAbout 30 off-screen imagesLazy loadingLoad on scroll
7. HostingNo compression or long cachingCompression, 1-year cache23 KB over the wire
8. Tracking342 KB of Google scriptsKept, on purposeReal visitor data intact

Overall, Lighthouse performance on my contact-form view went from 54 to 82, and the homepage now scores 90 on mobile. SEO went from 92 to 100 and accessibility from 91 to 95.

Want this audit run on your site? Book a 30-minute site speed and visibility review.

Frequently asked questions

Does font affect page speed?

Yes. Every font family and weight is a file the visitor downloads before the text looks right, and a font swap can make the page jump. On my site, fonts added about 100 KB and a 0.236 layout shift until I fixed them.

Should I use base64 images on my website?

Only for tiny icons of a few kilobytes. Large base64 images bloat the page file, delay everything after them and cannot be cached. My homepage was 1,695 KB because of 41 of them.

Are Google Fonts cached across websites?

No, not since Chrome 86 in October 2020. Every website now has its own cache, so a visitor downloads your fonts on their first visit, wherever the fonts are hosted.

Why is my Lighthouse score different every time I test?

Browser extensions, network speed and your device all change the result. Test in an incognito window, in mobile mode, on the plain URL, and run it twice. One of my pages scored 87 in a normal window and 99 in incognito.

How fast should my website load?

Google's "good" thresholds are: Largest Contentful Paint within 2.5 seconds, Cumulative Layout Shift of 0.1 or less, and Interaction to Next Paint within 200 milliseconds.

Speed problems hide in how a page is built

None of this was visible by looking at my homepage. It looked finished. It was carrying 1.6 MB of weight nobody could see.

If your site was built quickly, by a builder, an agency on a deadline or an AI tool, run the 2-minute Lighthouse test in incognito before you spend another rupee on content. The foundation decides how far your content can go.

Posted in Search Everywhere Optimization

Share this article

Want this audit on your site?

In 30 minutes I will look at how your site is built, what it is costing you in speed and search, and what to fix first. No pitch.

Book a 30-minute site speed and visibility review
In their words

What clients say after working with me

Faith Alayon
Faith Alayon
Operations Leader, Level Up
SEO in the AI Age

"Anyone looking for serious SEO expertise in the AI age would do well to have her in their corner."

Read full review →
Dr. Akhil Shahani
Dr. Akhil Shahani
MD, Shahani Group
AI Search Visibility

"We briefly worked with Shikha and her team at CrazyDi to improve the appearance of our website's AI search. I found them to be very knowledgeable and responsive to our company's needs."

Read full review →
Mayank Kumar
Mayank Kumar
Performance Marketing Specialist, Godrej Properties Limited
Owned the SEO Agenda

"Shikha has been an exceptional SEO partner and someone who truly took ownership of the entire SEO agenda."

Read full review →
Dr. Deepak Garg
Dr. Deepak Garg
Eye Solutions
3× Organic Growth

"Traffic grew from 10,000 to 30,000+ monthly visits, and a 3x boost in visibility within just a year."

Hoshang Jehangirji
Hoshang Jehangirji
Experiential marketing and brand-led events
Ownership & Consistency

"Shikha is one of those rare people who make you feel that your work matters to them as much as it matters to you."

Read full review →
Simran Purswani
Simran Purswani
Tritorc
Strategy & Coaching

"Someone who understands both the human and analytical sides of marketing."

Read full review →
Monaz Cooper
Monaz Cooper
Marketing Director, Amfico Agencies Pvt. Ltd.
B2B Marketing Partner

"She is still an integral part of my extended team and I look forward to all her valuable inputs and suggestions!"

Read full review →
Get in touch

Tell me where you want to be found

Share a little about your brand and what you're trying to grow. I read every message and reply personally, usually within a day.