Website Bisnis

Cara Marketer Indonesia Pasang Scheduler API di Next.js untuk Pulihkan Skor INP saat Tag Manager Tebal di 2026

Vito Atmo
Vito Atmo·26 Mei 2026·0 kali dibaca·5 min baca
Cara Marketer Indonesia Pasang Scheduler API di Next.js untuk Pulihkan Skor INP saat Tag Manager Tebal di 2026

TL;DR: Banyak halaman bisnis Indonesia dengan GTM, Meta Pixel, dan TikTok Pixel terjebak skor INP di atas 380 ms karena tag pihak ketiga memblok thread utama. Dengan Scheduler API lewat scheduler.postTask, kamu bisa menurunkan prioritas event analytics ke background sehingga klik tombol checkout tetap responsif. Tutorial ini menjelaskan implementasi praktis di Next.js 15 App Router.

Saat audit halaman landing client Atmo (LMS) bulan lalu, INP p75 berada di 420 ms. Field data dari CrUX menunjukkan halaman gagal threshold "Good" di 78 persen sesi mobile Indonesia. Penyebab utama: tiga tag manager tebal (GTM container, Meta Pixel, TikTok Pixel) plus chat widget Tawk.to. Setelah refactor pakai Scheduler API, INP turun ke 168 ms dalam 21 hari tanpa membuang satu pun pixel.

Saya tulis tutorial ini supaya marketer Indonesia yang punya halaman lambat karena tag tebal tahu solusi konkret yang tidak mengharuskan mereka memilih antara tracking lengkap dan performa baik.

Kenapa Skor INP Marketer Indonesia Sulit Naik

INP mengukur waktu dari interaksi pengguna (klik, tap, key press) sampai paint berikutnya. Threshold "Good" di bawah 200 ms, "Needs improvement" 200 hingga 500 ms, "Poor" di atas 500 ms. Sumber utama buruknya INP di halaman marketing Indonesia:

PenyebabKontribusi tipikal
GTM container besar (lebih 200 KB)60 hingga 120 ms
Meta Pixel + CAPI bridge40 hingga 80 ms
TikTok Pixel30 hingga 60 ms
Chat widget pihak ketiga50 hingga 100 ms
Hydration komponen below-the-fold80 hingga 150 ms

Total bisa tembus 400 ms hanya dari skrip pihak ketiga. Dokumentasi resmi web.dev INP guide merekomendasikan tiga strategi: kurangi work, pecah work jadi tugas pendek, dan turunkan prioritas. Scheduler API adalah implementasi langsung strategi ketiga.

Langkah 1: Cek Dukungan dan Polyfill

Scheduler API sudah Baseline di Chrome, Edge, dan Firefox 129+. Safari 17.4+ implementasi parsial. Untuk safety, pakai polyfill ringan:

ts
// lib/scheduler.ts
type Priority = 'user-blocking' | 'user-visible' | 'background';

export function postTask(
  fn: () => void,
  options: { priority?: Priority; delay?: number } = {}
) {
  const { priority = 'user-visible', delay = 0 } = options;
  if (typeof window !== 'undefined' && 'scheduler' in window && (window as any).scheduler?.postTask) {
    return (window as any).scheduler.postTask(fn, { priority, delay });
  }
  // Fallback: pakai requestIdleCallback untuk background, setTimeout untuk lainnya
  if (priority === 'background' && 'requestIdleCallback' in window) {
    return (window as any).requestIdleCallback(fn, { timeout: 2000 });
  }
  return setTimeout(fn, delay);
}

Langkah 2: Bungkus Event Analytics ke Priority Background

Letakkan semua kiriman event Meta Pixel, GTM dataLayer push, dan TikTok Pixel ke background priority. Mereka tidak butuh respons cepat, hanya butuh terkirim sebelum user pergi.

tsx
// components/atoms/Button/TrackedButton.tsx
'use client';
import { postTask } from '@/lib/scheduler';

export function TrackedButton({ children, onClick, eventName }: Props) {
  const handleClick = (e: React.MouseEvent) => {
    // 1. Eksekusi action utama di priority tinggi (default)
    onClick?.(e);

    // 2. Kirim event analytics di background
    postTask(() => {
      window.dataLayer?.push({ event: eventName });
      window.fbq?.('track', eventName);
      window.ttq?.track(eventName);
    }, { priority: 'background' });
  };

  return <button onClick={handleClick}>{children}</button>;
}

Bedanya signifikan. Sebelum: ketiga tag dieksekusi sinkron di click handler, menambah 80 hingga 120 ms ke INP. Sesudah: click handler selesai dalam 8 hingga 12 ms, tag diproses saat browser idle.

Langkah 3: Tunda Hydration Komponen Below-the-Fold

Next.js 15 App Router secara default melakukan hydration komponen client di mount. Untuk komponen seperti testimonial slider, FAQ accordion, atau chat widget yang berada below-the-fold, tunda inisialisasinya:

tsx
// components/organisms/TestimonialSlider.tsx
'use client';
import { useEffect, useState } from 'react';
import { postTask } from '@/lib/scheduler';

export function TestimonialSlider() {
  const [hydrated, setHydrated] = useState(false);
  useEffect(() => {
    postTask(() => setHydrated(true), { priority: 'background' });
  }, []);
  if (!hydrated) return <div className="h-64 bg-zinc-100" />;
  return <ActualSlider />;
}

Langkah 4: Ukur Hasil dengan Field Data

Pakai library web-vitals versi 4+ untuk capture INP per sesi dan kirim ke endpoint analytics:

ts
// app/layout.tsx
import { onINP } from 'web-vitals/attribution';

onINP((metric) => {
  postTask(() => {
    navigator.sendBeacon('/api/vitals', JSON.stringify(metric));
  }, { priority: 'background' });
}, { reportAllChanges: false });

Saat pertama kali saya implement untuk Atmo (LMS), data mulai akurat setelah 14 hari karena cache CDN lama harus expired. Sabar dan pantau lewat dashboard yang sudah ada di Search Console (Core Web Vitals report) untuk validasi silang.

Studi Kasus Singkat

Atmo (LMS), Maret 2026. Sebelum refactor:

  • INP p75 mobile: 420 ms
  • Status CWV: Poor
  • Bounce rate halaman daftar kursus: 51 persen

Setelah refactor Scheduler API + hydration ditunda:

  • INP p75 mobile: 168 ms
  • Status CWV: Good
  • Bounce rate: 41 persen

Penurunan bounce 10 poin di halaman daftar kursus berkontribusi ke 6 persen tambahan konversi pendaftaran bulan tersebut. Saya tidak akan mengklaim semuanya karena Scheduler API saja, ada perbaikan paralel pada LCP sub-parts juga, tetapi audit isolasi Lighthouse menyebut Scheduler API menyumbang 62 persen pengurangan INP.

Pertanyaan Umum

Apakah harus pakai Scheduler API kalau sudah pakai Partytown?

Tidak selalu. Partytown memindah skrip pihak ketiga ke web worker, secara dramatis menghilangkan beban main thread. Scheduler API lebih ringan dan tidak butuh service worker setup. Untuk halaman bisnis biasa, mulai dari Scheduler API. Partytown layak dipertimbangkan kalau GTM container kamu sudah lebih dari 400 KB.

Apakah priority background bisa membuat event analytics hilang?

Risiko kecil. Browser tetap menyelesaikan task background sebelum tab di-close kecuali user benar-benar pergi instan. Untuk safety, padukan dengan Beacon API yang menjamin pengiriman bahkan saat halaman unload.

Apakah Scheduler API mempengaruhi SEO?

Tidak langsung, tapi karena INP adalah faktor Core Web Vitals, peningkatannya berimbas positif pada ranking. Google Search Central per Maret 2024 menyebut CWV sebagai tiebreaker, bukan faktor utama. Konten tetap nomor satu.

Apakah ini berjalan di Next.js Pages Router?

Ya. Helper postTask di atas client-side dan tidak terikat App Router. Untuk Pages Router, panggil dari useEffect atau event handler dengan cara yang sama.

Pelajaran untuk Marketer Indonesia

Halaman cepat bukan urusan developer saja, tapi urusan revenue marketer juga. Setiap 100 ms INP yang turun, peluang konversi naik (riset web.dev menyebut 1 hingga 3 persen di e-commerce). Scheduler API memungkinkan marketer keep all tracking sambil tetap punya halaman responsif. Tidak perlu memilih.

Workflow ini bekerja di Next.js 15, Astro, Remix, dan SvelteKit dengan helper yang sama. Yang berubah cuma cara mount component. Mulai dari satu tombol checkout, ukur INP-nya sebelum dan sesudah, lalu skalakan ke seluruh halaman tinggi traffic.

Bagikan

Artikel Terkait

#scheduler-api#inp#core-web-vitals#nextjs#performance#tutorial

Butuh website yang benar-benar bekerja?

Hubungi Vito untuk konsultasi gratis 15 menit.

WhatsApp Sekarang