Sudden LCP Spike in Shopify Admin? How to Diagnose Mystery Performance Jumps
Ever had that "wait, what just happened?" moment when checking your Shopify app's performance metrics? It's a common developer dilemma, and recently, our community saw a fantastic discussion around a particularly puzzling case: a sudden, significant spike in Admin LCP (Largest Contentful Paint) across multiple Shopify apps, seemingly overnight, with no corresponding changes from the app developers themselves.
The Head-Scratcher: Dashboard Spikes vs. Stable Internal Metrics
Our community member, jaymitBeladiya, kicked off the thread with a classic head-scratcher. They noticed their Admin LCP (P75) shot up dramatically, from around 2.0 seconds to 3.0–3.7 seconds, and later even higher to 7–9 seconds, starting October 27. The kicker? They hadn't deployed any changes to their apps. What made it even more suspicious was that their own internal
web-vitals library, collecting data within the same app iframe, showed stable LCP numbers. To add another layer of mystery, they also observed a drop in CLS (Cumulative Layout Shift) in the Shopify Dev Dashboard around the same time. This screamed "measurement methodology change" rather than a real performance regression.
Jaymit was naturally looking for answers from the Shopify team: Were there changes to Admin Web Vitals collection,
App Bridge, or how LCP and CLS are measured and reported?
Community Wisdom: Unpacking the Mystery
This is where our amazing community stepped in, offering some seriously sharp insights and actionable advice. The consensus? We needed to differentiate between whether "the measurement changed" or "real users got slower." Here's a synthesis of the best approaches shared:
1. Double-Check Your Data Sources: App Bridge vs. Your Collector
This was a recurring theme. Rio from Expatify and paulvatiche both stressed the importance of comparing your independent
web-vitals collector with App Bridge's own shopify.webVitals.onReport output. This is crucial because it helps pinpoint where the discrepancy truly lies.
- Action: Capture the output from
while the issue is ongoing.shopify.webVitals.onReport - Key Detail: Paul highlighted capturing the
field on each metric. This tells you the specificversion
build that produced the measurement. Log this alongside the metric ID, name, value, collection time, and app route.App Bridge - Why it matters: If
reports the high LCP while your collector stays flat, you have solid evidence for Shopify support – paired measurements from the same page load and the exactApp Bridge
build version. If both local collectors are flat, it points more towards the dashboard's reporting or aggregation being the culprit.App Bridge
2. Pinpoint the LCP Element & Load Type
Sometimes, what counts as the LCP element can tell you a lot.
- Action: Log which element counts as the LCP in the slow sessions from your own collector.
- Why it matters: If it's an unexpected element (like a skeleton or a banner), the cause might be related to when content becomes visible, not necessarily slower code execution. Lauren Scott also suggested logging its load timing. If it's an image or script your app loads late, that is a real regression, even if your P75 looks flat.
- Also Check: Rio suggested seeing if the jump comes from first loads or repeat loads in the same session. Admin-side changes often show up as worse first-load numbers while repeat loads stay flat.
3. Mind the Measurement Start Line: Iframe vs. Parent Admin
This is a subtle but critical point raised by Lauren. Where each collector starts its timer can significantly affect the reported numbers.
- Action: Understand that
inside the iframe measures from that document's own navigation. A measurement taken from the parent admin can include the admin shell and theweb-vitals
handshake.App Bridge - Why it matters: If the start points differ, the two series won't match even if nothing changed on your side. This is vital context for Shopify support.
4. Route-Level Deep Dive
Is the problem global or localized?
- Action: Pull the Dev Dashboard LCP for the affected period (e.g., Oct 20 to Nov 3) and break it down by page or route.
- Why it matters: If the jump shows on one route only, the cause is likely specific to that screen rather than a wholesale app issue or platform-wide change.
5. Call for Community Confirmation
There's strength in numbers!
- Action: Check whether other app developers saw a similar jump on the same date.
- Why it matters: If several did, that's a strong platform signal, reinforcing the idea that it's not just your app. Jaymit's original post ended by asking this very question, showing great foresight.
Bringing it All to Shopify Support
Once you've gathered your evidence, the next step is to present it clearly to Shopify Partner support. Lauren Scott provided an excellent roadmap for this:
- Send them the spike date.
- Provide the Dev Dashboard figures.
- Explain your collector's timing start point.
- Include the LCP element data you've collected.
- Crucially: Ask them to confirm in writing whether the metric definition or aggregation changed on the affected dates (e.g., Oct 26-27).
- Retain that reply: This written confirmation is your leverage if you need to ask for a recalculation of affected metrics later.
This discussion really highlights the value of the Shopify community. When you hit a wall, chances are someone else has seen something similar or can offer a fresh perspective. By methodically gathering data – comparing internal metrics with
App Bridge's output, understanding measurement start points, and pinpointing the LCP element – you can build a strong case to either fix a real regression or get clarity from Shopify on potential platform-level reporting changes. It's all about being prepared and knowing what questions to ask!