Browsers will use heuristic caching, which can be unpredictable. Set explicit cache headers.
No Cache-Control header
Adding a Cache-Control header can significantly improve repeat-visit performance.
C
Image Optimization
Action
43 images, 0 KB saveable
REVIEW
43 images, 0 KB saveable
Warning::
!
https://www.heraldscotland.com/resources/images/18... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/73... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/73... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/20... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/72... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/sm... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/responsiv... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/16... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/72... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/72... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/16... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/16... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/72... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/72... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/responsiv... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/16... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/16... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://www.heraldscotland.com/resources/images/72... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
43images691 KB
0oversized-0 KB
34legacy format
19missing dimensionsCLS risk
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Performance issues directly impact user engagement and conversion rates.
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
C
Green Hosting
Action
Whether the site is served from green-energy infrastructure
REVIEW
Green Hosting
No green hosting detected
A+
Text Compression
All text resources are compressed
PASS
All text resources are compressed
Info::
✓
All text resources are compressed
All text resources are properly compressed.
A+
Font Loading
9 fonts (157 KB)
PASS
9 fonts (157 KB)
Info::
i
9 font(s) use font-display: swap (FOUT risk but functional)
Web fonts
9
157 KB total
Render-blocking
0
of 9
Dominant font-display
swap
Most common across fonts
Font loading timeline
TransferFOIT (block)FOUT (swap)
source-serif-4-v8-latin...woff2swap
Size20 KB
Load time26 ms
Start542 ms
RiskFOUT — text flashes from fallback to web font
source-serif-4-v8-latin...woff2swap
Size21 KB
Load time28 ms
Start542 ms
RiskFOUT — text flashes from fallback to web font
source-serif-4-v8-latin...woff2swap
Size21 KB
Load time28 ms
Start543 ms
RiskFOUT — text flashes from fallback to web font
libre-franklin-v14-lati...woff2swap
Size15 KB
Load time28 ms
Start543 ms
RiskFOUT — text flashes from fallback to web font
noto-serif-v23-latin-70...woff2swap
Size15 KB
Load time30 ms
Start544 ms
RiskFOUT — text flashes from fallback to web font
noto-serif-v23-latin-60...woff2swap
Size15 KB
Load time32 ms
Start545 ms
RiskFOUT — text flashes from fallback to web font
libre-franklin-v14-lati...woff2swap
Size15 KB
Load time33 ms
Start545 ms
RiskFOUT — text flashes from fallback to web font
source-serif-4-v8-latin...woff2swap
Size20 KB
Load time30 ms
Start550 ms
RiskFOUT — text flashes from fallback to web font
noto-serif-v23-latin-40...woff2swap
Size14 KB
Load time15 ms
Start875 ms
RiskFOUT — text flashes from fallback to web font
Optimization checklist
Preload critical fonts (priority=high)
Use woff2 format for all fonts
Set font-display to swap, optional, or fallback
Subset large fonts (≤100 KB each)
A+
Resource Caching
All resources properly cached
PASS
All resources properly cached
Info::
✓
No caching issues found
All static resources have appropriate caching headers.
A+
Critical Rendering Path
No render-blocking resources
PASS
No render-blocking resources
Info::
✓
No render-blocking resources detected
A+
Resource Hints
13 hints, 0 missing preconnects
PASS
13 hints, 0 missing preconnects
Info::
✓
Page uses 13 resource hint(s)
Current Resource Hints
preconnect
+3
13
preload—
dns-prefetch—
prefetch—
13 resource hints configured
A+
Render-Blocking Resources
No render-blocking resources detected
PASS
No render-blocking resources detected
Info::
✓
No render-blocking resources detected in <head>
A+
Third-Party Resources
No third-party resources detected
PASS
No third-party resources detected
Network Waterfall
172 requests over 7465ms
INFO
HTML JavaScript CSS Images Fonts XHR/Fetch Other
Third-Party Script Cost
Per-script blocking time, transfer cost, and cache headers
INFO
100%of JavaScript execution is third-party
First-party Third-party10861ms · 1577KB · £113/mo
Script
Category
Execution
Transfer
Unused
Monthly Cost
Verdict
www.heraldscotland.com
www.heraldscotland.com
Other
2188ms
69 KB
—
£23/mo
Costly
Unattributable
Unattributable
Other
1174ms
0 KB
—
£12/mo
Costly
a02342.heraldscotland.com
a02342.heraldscotland.com
Other
736ms
91 KB
68%
£8/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
735ms
151 KB
43%
£8/mo
Costly
discovery.evvnt.com
discovery.evvnt.com
Other
711ms
110 KB
26%
£7/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
633ms
170 KB
37%
£7/mo
Costly
a02342.heraldscotland.com
a02342.heraldscotland.com
Other
603ms
42 KB
—
£6/mo
Costly
cdn.tinypass.com
cdn.tinypass.com
Other
453ms
133 KB
61%
£5/mo
Costly
btloader.com
btloader.com
Other
436ms
39 KB
—
£5/mo
Costly
cdn.cxense.com
cdn.cxense.com
Other
389ms
38 KB
—
£4/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
301ms
118 KB
53%
£3/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
294ms
134 KB
47%
£3/mo
Costly
assets.adobedtm.com
assets.adobedtm.com
Other
269ms
67 KB
39%
£3/mo
Costly
www.heraldscotland.com
www.heraldscotland.com
Other
248ms
18 KB
—
£3/mo
Costly
ajax.googleapis.com
ajax.googleapis.com
Other
228ms
30 KB
—
£2/mo
Costly
js-agent.newrelic.com
js-agent.newrelic.com
Other
227ms
28 KB
—
£2/mo
Costly
cdn.parsely.com
cdn.parsely.com
Other
220ms
29 KB
—
£2/mo
Costly
api.cxense.com
api.cxense.com
Other
210ms
15 KB
—
£2/mo
Costly
www.heraldscotland.com
www.heraldscotland.com
Other
177ms
102 KB
65%
£2/mo
Optional
id.tinypass.com
id.tinypass.com
Other
136ms
1 KB
—
£1/mo
Optional
www.heraldscotland.com
www.heraldscotland.com
Other
126ms
66 KB
44%
£1/mo
Optional
a02342.heraldscotland.com
a02342.heraldscotland.com
Other
86ms
29 KB
—
£1/mo
Optional
www.heraldscotland.com
www.heraldscotland.com
Other
84ms
47 KB
55%
£1/mo
Optional
code.iconify.design
code.iconify.design
Other
72ms
8 KB
—
£1/mo
Optional
www.heraldscotland.com
www.heraldscotland.com
Other
62ms
37 KB
61%
£1/mo
Optional
www.npttech.com
www.npttech.com
Other
61ms
3 KB
—
£1/mo
Optional
www.heraldscotland.com
Other
Costly
Execution2188ms
Transfer69 KB
Monthly Cost£23/mo
Unattributable
Other
Costly
Execution1174ms
Transfer0 KB
Monthly Cost£12/mo
a02342.heraldscotland.com
Other
Costly
Execution736ms
Transfer91 KB
Unused68%
Monthly Cost£8/mo
Google Tag Manager
Tag Manager
Costly
Execution735ms
Transfer151 KB
Unused43%
Monthly Cost£8/mo
discovery.evvnt.com
Other
Costly
Execution711ms
Transfer110 KB
Unused26%
Monthly Cost£7/mo
Google Tag Manager
Tag Manager
Costly
Execution633ms
Transfer170 KB
Unused37%
Monthly Cost£7/mo
a02342.heraldscotland.com
Other
Costly
Execution603ms
Transfer42 KB
Monthly Cost£6/mo
cdn.tinypass.com
Other
Costly
Execution453ms
Transfer133 KB
Unused61%
Monthly Cost£5/mo
btloader.com
Other
Costly
Execution436ms
Transfer39 KB
Monthly Cost£5/mo
cdn.cxense.com
Other
Costly
Execution389ms
Transfer38 KB
Monthly Cost£4/mo
Google Tag Manager
Tag Manager
Costly
Execution301ms
Transfer118 KB
Unused53%
Monthly Cost£3/mo
Google Tag Manager
Tag Manager
Costly
Execution294ms
Transfer134 KB
Unused47%
Monthly Cost£3/mo
assets.adobedtm.com
Other
Costly
Execution269ms
Transfer67 KB
Unused39%
Monthly Cost£3/mo
www.heraldscotland.com
Other
Costly
Execution248ms
Transfer18 KB
Monthly Cost£3/mo
ajax.googleapis.com
Other
Costly
Execution228ms
Transfer30 KB
Monthly Cost£2/mo
js-agent.newrelic.com
Other
Costly
Execution227ms
Transfer28 KB
Monthly Cost£2/mo
cdn.parsely.com
Other
Costly
Execution220ms
Transfer29 KB
Monthly Cost£2/mo
api.cxense.com
Other
Costly
Execution210ms
Transfer15 KB
Monthly Cost£2/mo
www.heraldscotland.com
Other
Optional
Execution177ms
Transfer102 KB
Unused65%
Monthly Cost£2/mo
id.tinypass.com
Other
Optional
Execution136ms
Transfer1 KB
Monthly Cost£1/mo
www.heraldscotland.com
Other
Optional
Execution126ms
Transfer66 KB
Unused44%
Monthly Cost£1/mo
a02342.heraldscotland.com
Other
Optional
Execution86ms
Transfer29 KB
Monthly Cost£1/mo
www.heraldscotland.com
Other
Optional
Execution84ms
Transfer47 KB
Unused55%
Monthly Cost£1/mo
code.iconify.design
Other
Optional
Execution72ms
Transfer8 KB
Monthly Cost£1/mo
www.heraldscotland.com
Other
Optional
Execution62ms
Transfer37 KB
Unused61%
Monthly Cost£1/mo
www.npttech.com
Other
Optional
Execution61ms
Transfer3 KB
Monthly Cost£1/mo
These scripts may cost more than they're worth
www.heraldscotland.com adds 2188ms and costs ~£23/month
Unattributable adds 1174ms and costs ~£12/month
a02342.heraldscotland.com adds 736ms and costs ~£8/month
Google Tag Manager adds 735ms and costs ~£8/month
discovery.evvnt.com adds 711ms and costs ~£7/month
Google Tag Manager adds 633ms and costs ~£7/month
a02342.heraldscotland.com adds 603ms and costs ~£6/month
cdn.tinypass.com adds 453ms and costs ~£5/month
btloader.com adds 436ms and costs ~£5/month
cdn.cxense.com adds 389ms and costs ~£4/month
Google Tag Manager adds 301ms and costs ~£3/month
Google Tag Manager adds 294ms and costs ~£3/month
assets.adobedtm.com adds 269ms and costs ~£3/month
www.heraldscotland.com adds 248ms and costs ~£3/month
ajax.googleapis.com adds 228ms and costs ~£2/month
js-agent.newrelic.com adds 227ms and costs ~£2/month
cdn.parsely.com adds 220ms and costs ~£2/month
api.cxense.com adds 210ms and costs ~£2/month
100% of JavaScript execution time is spent on third-party scripts. Consider auditing which scripts are essential.
Why this matters
When third-party JS execution time exceeds your own, performance gains from frontend work are capped by code you don't own.
Learn more ▾▴
Every millisecond of third-party JS competes with your own for main-thread time. If their share is bigger than yours, optimization on your code base barely moves the needle. Audit, defer, or remove third-parties before further frontend optimization. Use Lighthouse's third-party audit to identify the worst offenders.
Source: web.dev
www.heraldscotland.com takes 2188ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
Unattributable takes 1174ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
a02342.heraldscotland.com takes 736ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
68% of a02342.heraldscotland.com's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.
Source: web.dev
Google Tag Manager takes 735ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
discovery.evvnt.com takes 711ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
Google Tag Manager takes 633ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
a02342.heraldscotland.com takes 603ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
cdn.tinypass.com takes 453ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
61% of cdn.tinypass.com's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.
Source: web.dev
btloader.com takes 436ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
cdn.cxense.com takes 389ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
Google Tag Manager takes 301ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
53% of Google Tag Manager's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.
Source: web.dev
Google Tag Manager takes 294ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
assets.adobedtm.com takes 269ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
www.heraldscotland.com takes 248ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
ajax.googleapis.com takes 228ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
js-agent.newrelic.com takes 227ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
cdn.parsely.com takes 220ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
api.cxense.com takes 210ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
65% of www.heraldscotland.com's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.
Source: web.dev
55% of www.heraldscotland.com's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.
Source: web.dev
61% of www.heraldscotland.com's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.