Laravel Vitals
Toggle theme
audit · May 21, 12:25
/blog

blog

mobile · Thu, May 21, 2026 12:25 PM ·
demo
Perf
D
69/100
Global
B
84/100
Performance
Lighthouse Performance score
D
-1 vs prev
Accessibility
Lighthouse Accessibility score
B
-6 vs prev
Best Practices
Lighthouse Best Practices score
A
-7 vs prev
SEO
Lighthouse SEO score
A
-1 vs prev

Core Web Vitals

LCP
Largest Contentful Paint — time until the largest visible content element is rendered. Good = under 2.5s.
4538ms
Largest Contentful Paint
CLS
Cumulative Layout Shift — how much visible content unexpectedly shifts during load. Good = under 0.1.
0.19
Cumulative Layout Shift
INP
Interaction to Next Paint — latency between user input and the next paint. Good = under 200ms.
418ms
Interaction to Next Paint
TTFB
Time to First Byte — how long the server takes to respond with the first byte. Good = under 800ms.
896ms
Time to First Byte

Front-end ↔ Back-end breakdown

LCP composition 4538ms total
backend 896ms (19.7%)
frontend 3642ms (80.3%)
N+1 query pattern detected
84 queries executed in 206 ms (4 unique patterns). Fixing this could shave ~144 ms off your TTFB.

Backend telemetry

Queries
84 (4 unique)
Query time
206ms
Memory peak
22.0MB
Cache hit rate
90%

Recommendations

5

performance

Reduce unused JavaScript

Warning
View all occurrences

JavaScript shipped to the browser but never executed wastes bandwidth and parse time.

Unused JavaScript still costs network bandwidth, parse time, and CPU. The browser must download, parse, and compile every byte you ship — even if it never executes.

Typical savings: 30-60% bundle size, 200-500ms LCP improvement
Recommended
// Lazy-load route-specific JS
const Dashboard = () => import('./Dashboard.js');

// Or use @vite directive in Blade
@vite(['resources/js/app.js'])
Avoid
<!-- Loading the entire bundle on every page -->
<script src="/build/everything.js"></script>
Found in your application
resources/views/blog.blade.php:12
<script src="/build/assets/app-abc.js"></script>
Hint: Use @vite([...]) instead.

N+1 query pattern detected

Warning
View all occurrences

A query pattern repeated above the configured threshold during this audit.

N+1 queries happen when accessing a relation inside a loop without eager loading. Each iteration triggers a separate SQL query — 100 items = 101 queries.

Typical savings: cuts query count by 90%, 200-1500ms TTFB improvement
Recommended
// Eager-load the relationship
$users = User::with('posts')->get();
foreach ($users as $user) {
    echo $user->posts->count();
}
Avoid
// 1 + N queries — fires a SELECT for each user
$users = User::all();
foreach ($users as $user) {
    echo $user->posts->count();
}

Repeated queries

  • SELECT * FROM posts WHERE user_id = ?
    ×24 app/Http/Controllers/BlogController.php:42
  • SELECT * FROM comments WHERE post_id = ?
    ×18 app/View/Components/PostCard.php:18

seo

H1 heading present and unique

Critical
View all occurrences

Each page should have exactly one H1 heading that describes the page content.

Meta description present

Warning
View all occurrences

A meta description improves click-through rate in search results.

All images have alt text

Warning
View all occurrences

Images without alt text are invisible to search engines and screen readers.

Page details

Page weight
3,041 KB
HTTP requests
82
DOM elements
1,868
Render-blocking
750ms
LCP element
main > section.hero > img <img src="/images/hero.jpg" loading="eager">

Resource breakdown

Type
Count
Size
script 13 775 KB
stylesheet 5 103 KB
image 22 720 KB
font 4 81 KB
document 1 13 KB

Third-party impact

3
Entity
Transfer
Blocking
Main thread
Google Tag Manager 55 KB
320ms
410ms
Facebook Pixel 37 KB 180ms 220ms
Google Analytics 23 KB 90ms 140ms

Main thread breakdown

Slowest requests

URL
Type
Size
Duration
vendor.js
Script
371 KB
1260ms
products
XHR
24 KB
274ms

Cache policy issues

2

Resources with cache TTL under 30 days. Long-term caching reduces repeat-visit load times.

  • https://example.test/old.js
    1h
  • https://example.test/font.woff2
    no cache

Diagnostics

Critical request chain depth
7 levels
Top JS execution costs
  • app.js 313ms
  • vendor.js 288ms
Open Vitals Spotlight (Cmd+K)
Open Vitals Spotlight (Ctrl+K)
Type at least 2 characters to search
↑↓ Navigate Open
0 results