コンサルティング · Loop Earplugs

Loop Earplugs:モバイルのINPを約800ms改善、チェックアウトのコンバージョン+7%

モバイルでのクリックのたびに、テンプレート、アプリ、タグの処理待ちが発生していたShopifyストアです。改修は同社のエンジニアが担当し、私は着目すべきポイントを提示しました。

~800 msモバイルのINPを短縮
+7%チェックアウトのコンバージョン(同社の計測値)
クライアントLoop Earplugs
プラットフォームShopify
サービスコンサルティング、必要に応じたトレーニング
クライアント

Loop Earplugs:Shopifyテーマにアプリを重ねた構成

Loopは耳栓をオンラインで販売しています。モバイルでは、チェックアウトへ進む過程で、カートへの追加やカートドロワーを開く操作をしても、画面に表示が出るまでに時間がかかりすぎていました。

Loop Earplugs homepage
発見した問題と対処内容

モバイルでのカート追加:テーマコード、アプリ、タグ、カートドロワー

INPのトレースをチームと一緒に分析しました。クリック時の遅延はテーマ、アプリ、タグの全体に分散しており、単一の原因によるものではありませんでした。改修は同社のエンジニアが実装し、私は必要に応じてトレースの読み解き方をトレーニングしました。

問題点
対処内容
INP
テーマのコンポーネントが、1回のクリックに対して画面表示に必要な量をはるかに超える処理を実行していました。
同社のエンジニアがクリックごとの処理量を削減しました。コンポーネントがまず画面を更新し、残りの処理は後から実行するようにしました。
INP
テーマのカート追加用JavaScriptとカートドロワーの双方が同一のクリック内で実行され、ドロワー全体が丸ごと再レンダリングされていました。
ドロワーは変更があった部分のみをレンダリングします。
INP
ページ上のアプリが、同じクリックに対して独自の処理を追加で実行していました。
負荷の大きすぎるアプリを削除、または代替アプリに置き換えました。
2023年春

Nathanと初めて話したのは2023年2月でした。当時モバイルのINPは約1秒で、3月には1,350msになっていました。トレースを一緒に確認したところ、クリック時の処理にアプリが入り込んでいました。3月にはShopMessageを削除しました。すべてのクリックやスクロールをリッスンしていたセッションレコーダーのLucky Orangeも、Builder.ioのトラッキングとともに5月12日に削除しました。

修正前トップページ、2023年2月25日:アプリスクリプト12本
pc-quiz.s3.us-east-2.amazonaws.com/…/quiz-loader.min.jsd38xvr37kwwhcm.cloudfront.net/…/grin-sdk.jscdn.shopmsg.me/…/shopmessage_platform.jsd275fvz7g8rvo.cloudfront.net/…/online_store_script.jslive-video-shopping-e4078.web.app/…/shows.jslive-video-shopping-e4078.web.app/…/integration.jsvision.duel.me/duel-analytics.jscdn.nfcube.com/97f451076844edac4b1d04779bdb9668.jsintg.snapchat.com/…/shopify-scevent-init.jsapp.backinstock.org/…/31939_1675166049.jscdn.builder.io/…/track.jstools.luckyorange.com/…/lo.js
修正後2023年5月18日:9本
pc-quiz.s3.us-east-2.amazonaws.com/…/quiz-loader.min.jsd38xvr37kwwhcm.cloudfront.net/…/grin-sdk.jsd275fvz7g8rvo.cloudfront.net/…/online_store_script.jslive-video-shopping-e4078.web.app/…/shows.jslive-video-shopping-e4078.web.app/…/integration.jsvision.duel.me/duel-analytics.jscdn.nfcube.com/97f451076844edac4b1d04779bdb9668.jsintg.snapchat.com/…/shopify-scevent-init.jsapp.backinstock.org/…/31939_1675166049.js
Internet Archiveの記録による、LoopのトップページでShopifyが読み込んでいたアプリスクリプトの一覧です。Lucky OrangeとBuilder.ioのトラッキングは2023年5月10日〜12日にかけて、ShopMessageは3月に削除されました。
2023年11月

次はテーマです。「カートに追加」をクリックするたびに、カートドロワーの処理と同じクリック内で、Shopifyへ3つのセクションの再レンダリングを要求していました。同社のエンジニアは2023年11月20日に該当のコード行を削除しました。さらに2024年2月には、すべてのfetchリクエストをラップしていたKlaviyoのスニペットも削除されました。

修正前product-form.js
const formData = new FormData(this.form);if (this.dataset.cartType != 'page') {  formData.append('sections', this.cart.getSectionsToRender().map((section) => section.id));  formData.append('sections_url', window.location.pathname);  this.cart.setActiveElement(document.activeElement);}
修正前cart-notification.js(同一クリック内)
renderContents(parsedState) {    this.cartItemKey = parsedState.key;    this.getSectionsToRender().forEach((section => {      document.getElementById(section.id).innerHTML =        this.getSectionInnerHTML(parsedState.sections[section.id], section.selector);    }));    if (this.header) this.header.reveal();    this.open();
アーカイブされたLoopのテーマコードより。「カートに追加」をクリックするたびに、Shopifyへレンダリング済みセクションを3つ要求し、cart-notification.jsがそれぞれをページ内に差し替えていました。同じ週にjQueryも削除され、トップページのテーマスクリプトは7本から5本に減少しました。
CrUXデータ

CrUXの数値が大きく低下したのはこの春です。モバイルのINPは2023年3月の1,350msから6月には475msとなり、Nathanの言葉にある「約800ms短縮」とほぼ一致します。その秋には550msまで微増しました。テーマの改修後は2024年2月までに375msへと改善し、その後もその数値を維持しています。LCPも同様に改善し、2022年9月の4.3秒から2023年10月には1.9秒まで短縮されました。

200 ms500 ms2022年8月10月1450 ms2023年1月1350 ms4月475 ms7月10月2024年1月4月375 ms7月モバイルのINP(p75)
2.5秒4.0秒2022年8月4.3秒10月2023年1月4月7月1.9秒10月2024年1月4月2.2秒7月モバイルのLCP(p75)
CrUXにおけるloopearplugs.comの推移(モバイル、2022年8月〜2024年7月)。各月のバーはBigQuery内のGoogle CrUXデータによるp75値を示します。緑は「良好」、オレンジは「改善が必要」、赤は「不良」を表します。
「モバイルは約800ms速くなり、チェックアウトのコンバージョン率が7%向上しました。費用はほぼ即座に回収できました。」

Nathan Ziarczyk、エンジニアリングリード(Loop)

今回の教訓

Shopifyアプリは、クリックのたびに少しずつ負荷を上乗せします

ある機能のためにアプリを1つ導入しただけでも、そのスクリプトは関係のないページや無関係なクリック時にも読み込まれます。アプリ単体での負荷はわずかです。しかし商品ページ上でテーマやタグと一緒に積み重なると、クリック時の遅延を引き起こす一因になります。

INPの改善はテンプレートで行う

アプリの設定を変更しても、クリック時に何が実行されるかはほとんど変わりません。それを決めているのはテーマのコードです。「カートに追加」の動作、カートドロワーがレンダリングされるタイミング、どのアプリスクリプトを読み込むかを制御しているのはテーマです。

チェックアウトに進むクリックの高速化は成果につながる

7%の向上を約束できるわけではありません。これはLoopが自社ストアで独自に計測した数値です。

Arjen Karel

Shopifyストアで、モバイルのクリックが遅くなっていませんか?

開発チームと連携しながら、週1〜3日、スプリント単位で進めます。

コンサルティングの進め方を見る

その他の改善実績はクライアント実績ページをご覧ください。

Loop Earplugs:モバイルのINPを約800ms改善、チェックアウトのコンバージョン+7% Core Web Vitals Loop Earplugs:モバイルのINPを約800ms改善、チェックアウトのコンバージョン+7%