Website Speed Optimization: A Developer's 2026 Guide

09/18/2026

Web Design

A developer's guide to website speed optimization — Core Web Vitals thresholds, quick wins, caching, hosting, and a step-by-step test workflow.

Website speed optimization illustration featuring a performance gauge, loading time clock, analytics charts, and page speed metrics.

Website speed optimization is the practice of measurably improving Core Web Vitals - LCP, INP, and CLS - for real users, then validating those gains in field data. Start here: run PageSpeed Insights on your most important page right now, note the p75 LCP, INP, and CLS values from the Chrome UX Report (CrUX) field data, capture a Lighthouse lab run, and record your TTFB. That baseline is your scoreboard.

Quincy Samycia
Play IconPause Icon
0:00
0:00

Tools, Field vs. Lab Testing, and the Recommended Test Workflow

Website performance illustration showing page design, click interaction, and layout optimization connected to a speed gauge.
Website technology stack illustration with webpage design, code, styling, and server layers representing factors that affect site performance.
Image optimization illustration showing a large image file being compressed and transformed for faster website loading.
No items found.

Once you have it, the prioritization rule is straightforward:

  • Failing LCP? Check TTFB first. Infrastructure owns the floor; frontend changes cannot fully compensate for a slow origin.
  • Failing INP? Look at main-thread busy time and JavaScript bundle size.
  • Failing CLS? Audit image dimensions, font loading, and any dynamically injected content above the fold.
  • Quick wins to run in the next 30 minutes: convert images to WebP or AVIF, add fetchpriority="high" to your LCP image, defer non-critical JS, and enable Brotli compression at the server.

The layered optimization stack — infrastructure first, then JavaScript, then CSS and typography, then images — determines who owns each metric. Fix the owning layer before chasing Lighthouse score points.

Key Takeaways

Website speed optimization requires measuring field p75 Core Web Vitals first, then fixing the layer that owns the failing metric — infrastructure, JavaScript, CSS, or images — in that order.

PointDetails
Measure field p75 firstUse PageSpeed Insights and CrUX to confirm real-user LCP, INP, and CLS before running lab diagnostics.
Fix the owning layerInfrastructure sets the performance floor; frontend changes cannot compensate for TTFB above 600ms.
Quick wins ship firstImage format conversion, CDN deployment, Brotli, and JS deferral move CrUX metrics within a 28-day window.
Budget and gate in CIUse Lighthouse CI with a budget.json to block regressions before they reach production.
The Branded AgencyDelivers performance audits, prioritized roadmaps, and full implementation for Webflow, Shopify, and custom builds.

Which tools should you use for website speed optimization?

The right tool depends on whether you need a diagnosis or a verdict. Field tools tell you what real users experience; lab tools tell you why.

  • PageSpeed Insights: The fastest combined check. Surfaces both Lighthouse lab data and CrUX field data in one report, with p75 distributions for LCP, INP, and CLS. Use it first.
  • Lighthouse: Built into Chrome DevTools (Cmd+Shift+P → "Run Lighthouse") or run via CLI. Reproducible lab audits with specific diagnostic recommendations. Best for before/after comparisons.
  • WebPageTest: Detailed filmstrip view, custom throttling presets, and multi-step scripting. Use it to debug waterfall issues and test from specific geographic locations.
  • GTmetrix: Synthetic testing with historical trend views and a test matrix across browsers and regions. Useful for regression tracking over time.
  • Chrome DevTools (Network + Performance panels): The deepest diagnostic layer. Network panel shows the full waterfall; Performance panel records main-thread activity, long tasks, and layout shifts. Coverage tab identifies unused JS and CSS.
  • Chrome User Experience Report (CrUX): Google's anonymized field dataset, queryable via BigQuery or surfaced in PageSpeed Insights and Search Console. The authoritative source for p75 field truth.
  • web-vitals JavaScript library: Lightweight RUM instrumentation. Drop it into your site to capture LCP, INP, and CLS from real users and send to your analytics endpoint.
  • Lighthouse CI: Automates Lighthouse runs in your CI/CD pipeline and gates deploys on performance budgets. Prevents regressions before they reach production.

Field vs. lab: when to use each

Field data (CrUX, web-vitals RUM) is the source of truth for Core Web Vitals and for Google's search ranking signals. Lab tools are for reproducible debugging and CI checks. The practical split: use field data to confirm a problem exists at p75, then use lab tools to isolate and fix it.

Recommended test workflow

TaskBest ToolWhy
Confirm p75 field CWVPageSpeed Insights / CrUXReal-user data, SEO-relevant
Debug LCP root causeWebPageTest + DevTools NetworkFilmstrip + waterfall detail
Diagnose INP / long tasksDevTools Performance panelMain-thread timeline
Measure CLS sourcesDevTools Layout Shift RegionsVisual overlay of shift origins
Automate regression checksLighthouse CICI/CD gate on budget thresholds
Track trends over timeGTmetrix / Search Console CWVHistorical snapshots

Run the workflow in this order: capture field p75 baseline → focused lab runs with mobile emulation and a throttled connection → identify the top three metric owners → implement quick wins → re-run lab → wait one CrUX cycle (28 days) to confirm field p75 movement.

Free Brand Health Audit

Make sure your brand is built to sell

Search has changed. Your customers aren't just Googling anymore. They're asking ChatGPT, Perplexity, Gemini and other AI platforms what to buy, who to trust and which brands they should consider.

If your brand isn't showing up clearly in those answers, you're already losing opportunities. Our free Brand Health Audit shows you where your brand stands across traditional search, AI search and brand positioning.

checkmark icon
AEO Health
checkmark icon
GEO Visibility
checkmark icon
Brand Health

Sample brand audit

Live preview

Traditional search

72

AI search (GEO)

34

Brand positioning

58

Core Web Vitals Thresholds, Quick Wins, and Deeper Infrastructure Optimizations

Webpage loading illustration showing visual content and video elements loading separately to improve website performance.
Website hosting illustration showing multiple computers connected to distributed servers for faster content delivery.
Website optimization illustration showing code, images, and digital assets feeding into a faster, streamlined webpage.
Website performance testing illustration showing a webpage passing through an optimization process with speed and analytics metrics.

What are Core Web Vitals and what thresholds should you target?

Google defines three Core Web Vitals: LCP (Largest Contentful Paint), INP (Interaction to Next Paint), and CLS (Cumulative Layout Shift). Each measures a distinct dimension of user experience, and each has a "good" threshold assessed at the 75th percentile of page loads.

MetricWhat It MeasuresGood ThresholdNeeds Improvement
LCPTime to render the largest visible content element≤ 2.5s2.5s-3.1s (poor > 3.1s)
INPWorst-case interaction latency (keyboard, tap, click)≤ 200ms200ms-600ms (poor > 600ms)
CLSCumulative visual instability from layout shifts≤ 0.10.1-0.2 (poor > 0.2)

The p75 aggregation rule means a page "passes" only when at least 75% of real-user sessions hit the good threshold. That is a deliberately high bar. A median LCP of 2.4s can still fail if the 75th percentile sits at 3.1s.

What poor values typically indicate:

  • Slow LCP: Usually a slow server TTFB, an unoptimized hero image, or a render-blocking resource delaying the LCP element's discovery.
  • High INP: Long main-thread tasks, large JavaScript bundles executing on interaction, or third-party scripts competing for the main thread.
  • High CLS: Images or embeds without explicit width/height attributes, late-loading fonts causing text reflow, or dynamically injected banners above existing content.

Metric ownership maps cleanly to the optimization stack: LCP is owned by infrastructure and images, INP by JavaScript, CLS by CSS and font loading.

High-impact quick wins to run first

Before touching your build pipeline, these fixes typically move sites from "poor" toward "needs improvement" or "good" within a single 28-day CrUX window. Ranked by impact relative to effort:

  1. Convert images to WebP or AVIF. Replace JPEG/PNG hero images and product shots. AVIF offers the best compression at equivalent quality; WebP has near-universal browser support. Use <picture> with srcset to serve both with a JPEG fallback.
  2. Add fetchpriority="high" to your LCP image. One attribute change. Tells the browser to fetch the LCP asset ahead of other images in the queue. Pair it with loading="eager" (never lazy on the LCP element).
  3. Preload the LCP resource. Add <link rel="preload" as="image" href="hero.avif"> in <head>. For LCP text, preload the font file instead.
  4. Deploy a CDN. Serving assets from an edge node geographically close to the user cuts TTFB significantly. A CDN, combined with Brotli compression and browser caching, is the single highest-ROI infrastructure move for most sites.
  5. Enable Brotli compression. Brotli typically outperforms gzip on text assets (HTML, CSS, JS). Enable it at the server or CDN layer; most modern CDNs support it natively.
  6. Defer non-critical JavaScript. Add defer or async to scripts that don't need to run before first paint. For scripts that can load after interaction, use dynamic import() or a facade pattern.
  7. Inline critical CSS. Extract the CSS needed to render above-the-fold content and inline it in <head>. Load the full stylesheet asynchronously with <link rel="stylesheet" media="print" onload="this.media='all'">.
  8. Set explicit width and height on all images. The browser reserves layout space before the image loads, eliminating the layout shift that drives CLS scores up.

Pro Tip: On Shopify or WordPress, verify each fix with a before/after WebPageTest filmstrip run using the "3G Fast" throttling preset. A visual comparison is far more persuasive to stakeholders than a raw score change. For Shopify-specific performance work, the Shopify speed optimization guide covers platform-specific constraints in detail.

MDN's web performance best practices confirm that resource hints, JS minimization, and image optimization consistently deliver the largest gains per unit of effort.

Deeper optimizations: server, network, and build pipeline

Once quick wins are in place, the next layer of gains requires engineering effort. These changes move the needle on sites that have already addressed images and basic JS deferral.

Infrastructure and network

  • HTTP/3 and QUIC: HTTP/3 eliminates head-of-line blocking at the transport layer. Enable it at your CDN or load balancer; most major CDN providers support it without application changes.
  • Edge CDN configuration: Push not just static assets but HTML responses to the edge using stale-while-revalidate or surrogate keys. This cuts TTFB for cacheable pages from hundreds of milliseconds to single digits.
  • Cache layering: Layer browser cache (Cache-Control), CDN cache, and origin cache (Varnish, Redis). The goal is to serve the maximum percentage of requests without touching the origin.
  • TTFB target: Aim for TTFB under 200ms at the server. If your origin TTFB exceeds 600ms, frontend optimizations will have limited impact on LCP.
  • Early Hints (HTTP 103): Send Link: rel=preload headers before the full HTML response is ready. Supported by Cloudflare and Fastly; lets the browser start fetching critical assets while the server is still generating the page.

Build pipeline

  • Code-splitting: Split your JavaScript bundle by route so users only download what a given page needs. Webpack, Rollup, and Vite all support dynamic import() for this.
  • Tree-shaking: Remove unused exports at build time. Audit your bundle with tools like Webpack Bundle Analyzer or Vite's built-in rollup visualizer.
  • Long-task mitigation: Break up tasks exceeding 50ms using scheduler.yield() or setTimeout chunking. Long tasks are the primary driver of poor INP scores.
  • Web Workers: Offload CPU-intensive work (data parsing, image processing) off the main thread entirely.
  • SSR vs. SSG tradeoffs: Static site generation (SSG) delivers pre-rendered HTML with near-zero TTFB from a CDN. Server-side rendering (SSR) is necessary for personalized or frequently updated content but requires careful caching to avoid TTFB penalties. For marketing pages, SSG wins on performance almost every time.

Fonts and CSS

  • Critical CSS inlining: Inline only the CSS that renders above-the-fold content. Tools like Critical or PurgeCSS help extract it.
  • Font metric overrides: Use size-adjust, ascent-override, and descent-override in your @font-face declarations to match fallback font metrics to your web font. This eliminates the CLS caused by font swap.
  • Subsetted WOFF2: Subset fonts to include only the characters your site uses. A full Latin subset of a variable font can be 80KB+; a properly subsetted WOFF2 for English content often comes in under 20KB.
  • CSS containment: Apply contain: layout or contain: strict to components that should not affect the rest of the document layout. Reduces the scope of style recalculations that contribute to CLS.

Pro Tip: Stage heavy pipeline changes behind feature flags and deploy to a traffic slice before full rollout. Measure INP and LCP in your RUM data for the test cohort before promoting. A Lighthouse CI gate catches regressions in lab, but only RUM confirms the field impact.

Chasing a 100 Lighthouse score while real users wait 4 seconds? Keep reading!

If you need a performance roadmap ranked by impact instead of vanity scores, contact us for a free custom quote.

Why Latency Dominates, Setting Performance Budgets, and the Test Workflow

Website loading sequence showing multiple webpages and time indicators progressing toward a fully loaded website.

Why latency dominates multi-request pages

Network latency is the round-trip delay that accumulates across DNS resolution, TCP handshake, TLS negotiation, and each subsequent resource request. On a page with 40 resources across 8 hostnames, latency compounds fast. A 100ms RTT adds up to seconds of blocked time before a single byte of content renders.

Measure it by emulating realistic connections in DevTools or WebPageTest before optimizing.

Reading the waterfall

  1. DNS lookup time: A long DNS phase (>50ms) suggests you should add <link rel="dns-prefetch" href="//third-party.com"> for external hostnames.
  2. TCP/TLS connect time: High connect time on first requests points to missing preconnect hints or the absence of TLS session resumption.
  3. TTFB (Time to First Byte): The gap between request sent and first byte received. Anything above 600ms at the origin is an infrastructure problem, not a frontend one.
  4. Content download time: A long download bar on a small asset means bandwidth is the constraint; on a large asset, it is expected. Check asset size first.
  5. Blocked / queued time: Resources queued behind other requests indicate HTTP/1.1 head-of-line blocking. HTTP/2 or HTTP/3 eliminates most of this.

Network-level mitigations

  1. Consolidate hostnames: reduce the number of distinct origins your page contacts. Each new hostname costs a full DNS + TCP + TLS round trip.
  2. Add <link rel="preconnect"> for every third-party origin that delivers render-critical resources (fonts, analytics, A/B testing scripts).
  3. Use dns-prefetch for non-critical third-party hostnames to warm DNS in the background.
  4. Enable CDN edge caching for HTML and API responses, not just static assets.
  5. Configure TLS session resumption and OCSP stapling at your origin to cut TLS handshake time on repeat visits.
  6. Implement Early Hints (HTTP 103) at your CDN to start preloading critical assets before the full HTML response is sent.

How to set performance budgets and monitor over time

A performance budget is a set of numeric limits — bytes, timing thresholds, metric targets — that your site must stay within. Without one, every new feature ships without a performance cost estimate, and scores drift.

A budget.json for Lighthouse CI defines limits per metric and per resource type. When a pull request exceeds a budget, the CI job fails and the team sees exactly which asset or metric caused the regression before it ships.

Monitoring workflow:

  • Lighthouse CI: Runs on every PR. Gates deploys on lab metric thresholds. Catches regressions before production.
  • Search Console Core Web Vitals report: Shows field CWV status by URL group. Check weekly; a "Poor" classification here affects search ranking.
  • CrUX / BigQuery exports: Query raw p75 distributions by device type and connection. Useful for trend analysis and stakeholder reporting.
  • web-vitals RUM: The web-vitals library sends LCP, INP, and CLS from real users to your analytics endpoint. Set alerts when p75 LCP exceeds your target for more than 24 hours.
  • GTmetrix historical monitoring: Scheduled synthetic tests from fixed locations give you a regression signal independent of traffic fluctuations.

Alert triggers to configure:

  • p75 LCP rises above 2.5s for any high-traffic URL group
  • A new long task (>50ms) introduced in a JS bundle
  • Total JS bundle size increases more than 10KB compressed in a single deploy
  • CLS score crosses 0.1 on any page with a layout change in the latest deploy
  • TTFB at origin exceeds 600ms for more than 5% of requests

Assign ownership: a developer owns Lighthouse CI alerts; a marketer or analyst owns Search Console CWV and RUM dashboards. Shared ownership without clear assignment means alerts get ignored.

A step-by-step test workflow for any critical page

Follow this six-step cycle for every page you optimize: baseline → isolate → patch → lab-verify → deploy → monitor field p75.

  1. Capture the field baseline. Open PageSpeed Insights for the target URL. Record p75 LCP, INP, CLS, and TTFB from the CrUX field data section. Screenshot the full report.
  2. Reproduce in lab. Run Lighthouse in Chrome DevTools with mobile emulation and "Slow 4G" throttling. Run WebPageTest from a US East location with the same throttling preset. Note LCP, INP, CLS, TTFB, total JS bytes, and main-thread busy time.
  3. Isolate the top metric owner. Use the DevTools Performance panel to identify the longest tasks. Use the Network panel waterfall to find the LCP resource and its discovery time. Use Layout Shift Regions to locate CLS sources.
  4. Apply the fix. Implement one change at a time where possible. Mixing multiple fixes in a single deploy makes it impossible to attribute the gain.
  5. Lab-verify before deploying. Re-run Lighthouse and WebPageTest. Confirm the target metric improved. Check that no other metric regressed. Capture a before/after filmstrip from WebPageTest to show stakeholders visually.
  6. Deploy and monitor field p75. Push to production. CrUX updates on a 28-day rolling window, so expect field data to reflect the change within 4 weeks. Monitor your RUM (web-vitals library) daily for faster signal.

Metrics to capture before and after each fix: LCP (field p75 and lab), INP (field p75 and lab), CLS (field p75 and lab), TTFB (lab, WebPageTest), total JavaScript bytes (compressed), and main-thread busy time (DevTools Performance).

For stakeholder reporting, present a side-by-side WebPageTest filmstrip with timestamps, a before/after table of the six metrics above, and the projected CrUX window for field confirmation.

Fonts, Images, Lazy Loading, Caching, Hosting, and What Teams Get Wrong

Continuous website speed optimization cycle featuring performance monitoring, analytics, testing, technical improvements, and deployment.

How fonts and modern image formats affect LCP and CLS

Fonts and images are the two asset types most likely to own your LCP and CLS scores. Getting both right is one of the highest-leverage moves in the optimization stack.

Font loading with font-display

The font-display descriptor in your @font-face rule controls what the browser shows while a web font loads. The two values that matter most for performance:

  • font-display: swap renders text immediately in the fallback font, then swaps to the web font when it loads. Fast to first paint, but the swap itself causes a layout shift if the fallback and web font have different metrics.
  • font-display: optional gives the font a very short load window; if it doesn't arrive in time, the browser uses the fallback for the entire page visit. Near-zero CLS, but the web font may not appear on first load.

Pair font-display: swap with font metric overrides (size-adjust, ascent-override, descent-override) to make the fallback font dimensionally match the web font. The swap happens invisibly because the layout doesn't shift.

WOFF2, WebP, and AVIF

Serve fonts exclusively in WOFF2. It offers the best compression of any web font format and has full support across modern browsers. A subsetted WOFF2 file for a single weight of a Latin-script font typically runs 15-25KB.

For images, AVIF and WebP deliver significantly smaller file sizes than JPEG at equivalent visual quality. AVIF compresses more aggressively and handles photographic content particularly well; WebP is the safer default given its longer browser support history. Use the <picture> element to serve AVIF to supporting browsers with WebP and JPEG fallbacks:


  
  
  Hero image

Always include explicit width and height attributes. The browser uses the aspect ratio to reserve space before the image loads, which eliminates the layout shift that pushes CLS scores above 0.1.

Lazy loading beyond images: iframes and videos

The loading="lazy" attribute is well understood for images, but the same principle applies to iframes and video embeds — and the performance gains are often larger because these elements are heavier.

Iframes

Add loading="lazy" to any iframe that appears below the fold. This defers the iframe's network requests (including all its sub-resources) until the user scrolls near it. A YouTube embed without lazy loading fires dozens of requests on page load; with loading="lazy", those requests don't start until the embed is about to enter the viewport.

For third-party embeds where you want even more control, use a facade: render a static thumbnail image in place of the iframe and swap in the real embed only on user click. This approach eliminates the third-party script load entirely until the user explicitly requests it, which can remove hundreds of kilobytes from the initial page weight.

Videos

For self-hosted videos, set preload="none" to prevent the browser from downloading video data before the user interacts. Combine it with a poster attribute so the video area shows a static image rather than a blank space:

For videos used as background or decorative elements, consider replacing them with an animated AVIF or WebP image. The visual result is often indistinguishable, and the file size is a fraction of the equivalent video.

HTTP caching strategies: Cache-Control, ETag, and validation

Caching is the most cost-effective way to reduce page load time for returning visitors. The browser cache eliminates network requests entirely for cached resources; a CDN cache eliminates origin round trips for new visitors.

Cache-Control

The Cache-Control header tells browsers and CDNs how long to store a response. Key directives: max-age=31536000, immutable for versioned static assets (JS bundles, CSS files, images with content hashes in their filenames) — the browser never re-requests these until the filename changes. no-cache for HTML documents — the browser must revalidate with the server on every request, but if the content hasn't changed, the server returns a 304 and the browser uses its cached copy. stale-while-revalidate for API responses and CDN-cached HTML — serves the stale cached version immediately while fetching a fresh copy in the background.

ETag and conditional requests

An ETag is a fingerprint the server assigns to a response. On subsequent requests, the browser sends If-None-Match: [etag]. If the content hasn't changed, the server returns 304 Not Modified with no body — saving bandwidth and reducing load time to the round-trip cost of the validation request alone.

Last-Modified / If-Modified-Since works the same way using a timestamp instead of a hash. ETags are more reliable because timestamps can be imprecise across server clusters.

Practical caching setup

Set long max-age on all fingerprinted assets and no-cache on HTML. This combination gives you instant cache invalidation (change the filename, the browser fetches fresh) with zero stale-content risk on HTML. For a CDN layer, add s-maxage to control CDN TTL independently of browser TTL:

Cache-Control: public, max-age=31536000, immutable   # versioned assets
Cache-Control: no-cache                               # HTML
Cache-Control: public, s-maxage=3600, stale-while-revalidate=86400  # CDN-cached HTML

How hosting environment and server location affect your speed

Infrastructure sets the performance floor. A slow origin or a server on the wrong continent limits what every frontend optimization above can achieve. Verify origin TTFB before spending engineering time on frontend work.

Hosting tier matters

Shared hosting environments often have variable TTFB because server resources are contended. A VPS or dedicated instance with a properly tuned web server (Nginx, Caddy) and a PHP-FPM or Node.js process manager typically delivers more consistent sub-200ms TTFB. Managed cloud platforms (Vercel, Netlify, AWS CloudFront with Lambda@Edge) push rendering to the edge and can deliver HTML TTFB under 50ms for SSG content.

Cloudflare's guidance recommends targeting average server response times under 200ms. If your origin consistently exceeds that, the CDN layer becomes load-bearing rather than a performance enhancement on top of a fast origin.

Server location and RTT

A user in Los Angeles hitting an origin server in Frankfurt adds roughly 140ms of RTT before a single byte arrives. For a page requiring three sequential server round trips (HTML → CSS → JS), that's 420ms of pure latency before the browser has what it needs to render. A CDN with a PoP in Los Angeles reduces that to under 5ms per round trip.

For teams serving North American audiences, choose a primary origin in a US Central or US East region and let the CDN handle geographic distribution. For global audiences, consider multi-region origins with latency-based routing. The performance implications of server geography compound quickly at scale.

DNS resolution speed

DNS adds latency before the first TCP connection. Use a fast DNS provider (Cloudflare DNS, AWS Route 53) and set a reasonable TTL — 300 seconds for records that change infrequently. Avoid DNS chains (CNAME pointing to CNAME pointing to CNAME) that require multiple resolution steps.

The performance fixes most teams get wrong

Most teams treat Lighthouse score as the goal. It isn't. The score is a lab proxy for user experience; the actual goal is moving p75 field metrics into the "good" range for real users on real connections. Chasing a 100 Lighthouse score on a desktop emulation while your mobile p75 LCP sits at 4.2s is a common and expensive misdirection.

The second mistake is patching around a slow origin. We see this constantly: teams spend weeks optimizing images and deferring scripts, then wonder why LCP barely moves. If TTFB is 1.8s, the LCP clock starts at 1.8s before the browser has even discovered the LCP image. Fix the origin first.

Third-party script budgets are almost universally ignored until a performance crisis forces the conversation. A single A/B testing script, a chat widget, and two analytics tags can collectively add 400-600ms of main-thread blocking time. The fix isn't always removal — it's sequencing. Load third-party scripts after the page is interactive, use async or defer, and set a hard budget (for example, no more than 30KB compressed of third-party JS per page) enforced in Lighthouse CI.

The prioritization framework that actually works in practice: triage by traffic volume times revenue impact times metric severity. A checkout page with a "poor" INP score gets fixed before a blog post with a "needs improvement" LCP. Quick wins (images, compression, caching) ship first because they move the metric in the current CrUX window. Pipeline changes (code-splitting, SSG migration) follow because they require coordination. Infrastructure changes (CDN configuration, origin upgrade) run in parallel when the team has the capacity, because they set the floor everything else builds on.

Your site's performance deserves more than a score

Slow pages cost conversions. A faster site isn't just a better user experience — it's a direct input to revenue, paid media efficiency, and organic search ranking. The Branded Agency delivers strategic website development that treats performance as a first-class requirement, not an afterthought.

Our performance engagements start with a technical audit: we capture your field p75 baseline across all critical URLs, run lab diagnostics with WebPageTest and Lighthouse, and deliver a prioritized roadmap ranked by impact relative to engineering cost. From there, we handle implementation — image pipelines, JS deferral, CDN configuration, critical CSS, and Lighthouse CI setup — or work alongside your existing team. For Webflow and Shopify builds, we bring platform-specific expertise that generic audits miss. The result is a site that loads fast for real users, not just in a lab run.

Ready to move your Core Web Vitals into the "good" range? Request a technical audit and we'll show you exactly where your performance budget is leaking and what to fix first.

Authoritative Docs and Tools to Bookmark

  • PageSpeed Insights: Combined field + lab report for any URL; the fastest way to check p75 CWV and get Lighthouse diagnostics in one place.
  • Core Web Vitals documentation — Google Developers: The canonical reference for LCP, INP, and CLS definitions, thresholds, and how Google uses them in search.
  • Web.dev: p75 thresholds: Explains the data-driven rationale behind the p75 aggregation rule and the good/needs improvement/poor bands.
  • Web.dev: Vitals: Covers the web-vitals JS library, RUM setup, and monitoring patterns for ongoing field measurement.
  • Understanding latency — MDN: The clearest explanation of how DNS, TCP, and TLS latency compounds across multi-request pages, with throttling preset reference data.
  • WebPageTest: Free filmstrip testing with custom throttling, geographic locations, and waterfall detail — the best free tool for deep LCP and TTFB debugging.
  • GTmetrix: Scheduled synthetic monitoring with historical trend views; useful for tracking performance over time and catching gradual regressions.
  • Web performance best practices — MDN: Practical checklist covering critical rendering path, resource hints, compression, and image optimization with tool recommendations.

Sources

Recommended

An image of the author Quincy Samyica

Quincy Samycia

As entrepreneurs, they’ve built and scaled their own ventures from zero to millions. They’ve been in the trenches, navigating the chaos of high-growth phases, making the hard calls, and learning firsthand what actually moves the needle. That’s what makes us different—we don’t just “consult,” we know what it takes because we’ve done it ourselves.

Want to learn more about brand platform?

If you need help with your companies brand strategy and identity, contact us for a free custom quote.

We do great work. And get great results.

DrTung’s
Breathed new life into a storied oral care brand with a smarter site and marketing for scalable growth.

+2.3x
Increase in revenue YoY

+126%
Increase in repurchase rate YoY

READ MORE
DrTung’s oral care product image with a smiling man, tooth powder tabs, and activated charcoal floss.
Smartphone on a textured blue surface displaying a DrTung’s ad with the text “Make the Switch” and an image of a woman holding herbal tooth powder tabs.
Flat lay of DrTung’s oral care products, arranged with a blue pouch on white tile.
DrTung’s Activated Charcoal Floss packaging arranged in a repeating pattern on a bright blue background.
DrTung’s oral care product image with a smiling man, tooth powder tabs, and activated charcoal floss.
Smartphone on a textured blue surface displaying a DrTung’s ad with the text “Make the Switch” and an image of a woman holding herbal tooth powder tabs.
Flat lay of DrTung’s oral care products, arranged with a blue pouch on white tile.
DrTung’s Activated Charcoal Floss packaging arranged in a repeating pattern on a bright blue background.
Mary Louise Cosmetics
Scaled a heritage-inspired clean beauty brand with modern performance marketing and farm-to-face storytelling.

+93%
Revenue growth in first 90 days

+144%
Increase in attributed revenue

READ MORE
Mary Louise Lilac & Shea Body Butter jar with creamy texture and lavender sprigs on a beige surface.
A Mary Louise Miracle Serum bottle with a dropper cap, lying on a bed of small yellow flowers.
Mary Louise body butter promotional print materials with product photography and skincare application imagery.
Mary Louise Miracle Serum bottles arranged in a close-up pattern with pale yellow dropper caps.
Mary Louise Lilac & Shea Body Butter jar with creamy texture and lavender sprigs on a beige surface.
A Mary Louise Miracle Serum bottle with a dropper cap, lying on a bed of small yellow flowers.
Mary Louise body butter promotional print materials with product photography and skincare application imagery.
Mary Louise Miracle Serum bottles arranged in a close-up pattern with pale yellow dropper caps.
Eyecart
Made eye care feel modern, then marketed it like a DTC darling—with the results to match.

+91%
Increase in conversion rate

+46%
Increase in AOV

READ MORE
Eyecart optical care campaign image with a smiling woman holding a branded magnifying lens over one eye.
Eyecart billboard campaign featuring Blephaclean eye care wipes and healthy eye care messaging.
Multiple laptop screens display the Eyecart website, showcasing product pages and banners promoting eye care items.
Eyecart outdoor campaign posters featuring eye care products, skincare visuals, and modern branding.
Eyecart optical care campaign image with a smiling woman holding a branded magnifying lens over one eye.
Eyecart billboard campaign featuring Blephaclean eye care wipes and healthy eye care messaging.
Multiple laptop screens display the Eyecart website, showcasing product pages and banners promoting eye care items.
Eyecart outdoor campaign posters featuring eye care products, skincare visuals, and modern branding.
Lucky Girl Rosé
We turned a zero-carb rosé into a lifestyle brand that makes every moment worth celebrating.

+200%
Increase in conversion rate

+688%
Increase in attributed revenue

READ MORE
A bottle of Lucky Girl rosé wine nestled among pink and white flowers in a rustic outdoor setting.
Lucky Girl rosé picnic setup with wine bottle, fruit, sunglasses, and The Lucky Club booklet.
Lucky Girl rosé campaign visual with a wine glass, gold tray, red nails, and Pour Yourself Some Luck text.
Lucky Girl rosé wine bottle with floral label design and soft pink lifestyle styling.
A bottle of Lucky Girl rosé wine nestled among pink and white flowers in a rustic outdoor setting.
Lucky Girl rosé picnic setup with wine bottle, fruit, sunglasses, and The Lucky Club booklet.
Lucky Girl rosé campaign visual with a wine glass, gold tray, red nails, and Pour Yourself Some Luck text.
Lucky Girl rosé wine bottle with floral label design and soft pink lifestyle styling.