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:
| Penyebab | Kontribusi tipikal |
|---|---|
| GTM container besar (lebih 200 KB) | 60 hingga 120 ms |
| Meta Pixel + CAPI bridge | 40 hingga 80 ms |
| TikTok Pixel | 30 hingga 60 ms |
| Chat widget pihak ketiga | 50 hingga 100 ms |
| Hydration komponen below-the-fold | 80 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:
// 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.
// 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:
// 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:
// 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.
Artikel Terkait
Website Bisnis
Cara Marketer Indonesia Pasang Event Timing API di Next.js untuk Debug INP Lapangan di 2026
Skor INP bagus di Lighthouse tapi jelek di CrUX adalah masalah umum. Pelajari cara pasang Event Timing API plus PerformanceObserver di Next.js untuk debug interaksi lambat di pengguna nyata.
Website Bisnis
Cara Marketer Indonesia Pasang Speculation Rules di Next.js untuk Instant Navigation 2026
Panduan praktis pasang Speculation Rules API di Next.js App Router agar klik internal terasa instan. Berdasarkan praktik Vito Atmo di proyek Atmo dan Nalesha.
Website Bisnis
Cara Marketer Indonesia Pasang llms.txt di Next.js untuk Memandu Crawler AI dan Naikkan Citation di Jawaban AI Search 2026
Panduan lengkap memasang llms.txt di Next.js: file mandat baru yang dipakai ChatGPT, Claude, dan Perplexity untuk memilih konten yang dikutip.
Butuh website yang benar-benar bekerja?
Hubungi Vito untuk konsultasi gratis 15 menit.
WhatsApp SekarangDaftar Isi