Cara Membuat Safelink Otomatis di Blog Utama (Aman, SEO-Friendly, dan Mudah Diterapkan)

  • Tutorial Membuat Safelink Otomatis di Blog Utama

    Safelink adalah sebuah halaman peralihan pada situs yang berfungsi untuk memastikan bahwa URL atau tautan tujuan aman dari virus maupun malware, dan yang paling penting, memaksimalkan potensi kunjungan situs. Secara sederhana, safelink bekerja sebagai halaman transisi sebelum pengunjung diarahkan ke halaman tujuan sebenarnya.

    Safelink umumnya seringkali menggunakan domain yang berbeda dari situs utama. Namun, metode ini memiliki beberapa kekurangan tertentu. Karena itulah kami menawarkan solusi yang lebih optimal: membuat laman safelink otomatis yang tetap berada di domain utama situs, bekerja secara sempurna dan memberikan peningkatan SEO yang lebih maksimal serta peluang monetisasi tanpa membuat situs baru.



    Mengapa Safelink Penting untuk Kesehatan SEO Situs Anda?

    Salah satu tantangan terbesar yang dihadapi situs download gratis adalah tingginya rasio pentalan (Bounce Rate(1)). Mayoritas pengunjung hanya ingin mengunduh file yang mereka butuhkan, lalu langsung meninggalkan situs. Meski terlihat sepele, kondisi ini berdampak secara signifikan pada performa SEO situs di mata mesin pencari.

    Inilah alasan safelink digunakan, dengan Safelink di domain utama, Anda dapat: menahan pengunjung sedikit lebih lama untuk mengurangi Bounce Rate secara signifikan; meningkatkan Pageviews (jumlah halaman yang dilihat) per kunjungan; dan sebagai sarana monetisasi yang efektif.

    Bounce rate (rasio pentalan) adalah persentase pengunjung yang meninggalkan situs web setelah hanya melihat satu halaman tanpa berinteraksi lebih lanjut, seperti mengklik tautan, mengisi formulir, atau mengunjungi halaman lain. Angka yang tinggi bisa menandakan konten tidak relevan atau pengalaman pengguna buruk, sebaliknya angka rendah menunjukkan interaksi pengguna yang baik.

    Skenario Penggunaan dan Manfaat Safelink di Situs Utama

    Cara kerja safelink ini mirip dengan safelink pada umumnya, perbedaannya terletak pada lokasi halaman safelink yang tetap berada di domain utama.

    Skenarionya sederhana:
    ketika pengunjung mengklik tautan download tertentu, mereka akan diarahkan ke halaman safelink di situs yang sama, sebelum akhirnya diteruskan ke halaman unduhan sebenarnya.

    Cara Kerja Safelink


    Pendekatan ini memberikan banyak manfaat, di antaranya:

    • Hemat Biaya: Tidak perlu membuat situs baru atau membeli domain tambahan.
    • Mudah Disesuaikan: Terintegrasi dengan situs utama.
    • Optimasi SEO dan Pageviews: Mengurangi Bounce Rate secara signifikan, meningkatkan interaksi dan jumlah pengunjung
    • Kemanaan Terjamin: 100% aman karena masih berada dalam satu domain yang sama.

    Pembaruan Safelink dengan Fitur yang Lebih Disempurnakan

    Panduan ini telah mengalami beberapa kali pembaruan, mulai dari peningkatan performa, penyederhanaan kode, hingga penambahan fitur baru. Pada versi terbaru, Anda kini memiliki kontrol yang jauh lebih fleksibel terhadap cara kerja safelink. Berikut beberapa fitur unggulan yang ditambahkan:

    1. Menentukan URL yang Melewati Safelink

    Jika sebelumnya semua tautan eksternal dipaksa melewati safelink (kecuali whitelink tertentu), kini logikanya dibalik. Anda memiliki kontrol penuh untuk:

    • Bebas menentukan URL mana saja yang harus melewati safelink.
    • Mengabaikan tautan yang tidak penting tanpa perlu mendaftarkan pengecualian satu per satu.
    2. Multiple Halaman Safelink

    Untuk mencegah crawler mesin pencari mendeteksi pola yang sama, Anda kini dapat menggunakan beberapa halaman safelink sekaligus yang akan dipanggil secara acak.

    3. Struktur URL yang Lebih Ringkas

    Pada versi lawas, URL safelink terlihat panjang karena menyertakan URL asli yang di-encode Base64 (.com/p/safelink.html?url=xxxxxxxxx).

    Pada versi terbaru, metode ini diubah, alih-alih menampilkan URL asli di parameter, kini URL tersebut disimpan di sessionStorage(2) dengan kunci khusus, sehingga:

    • URL safelink lebih pendek
    • Lebih bersih dan aman
    • Tidak menampilkan URL tujuan secara langsung

    sessionStorage adalah fitur penyimpanan data sementara di sisi klien (browser) yang menyimpan data spesifik untuk satu tab atau jendela peramban saja, dan data tersebut akan otomatis terhapus ketika tab/jendela ditutup.

    4. Kontrol Penuh Waktu Hitung Mundur

    Anda kini bebas menentukan berapa lama waktu tunggu (countdown) yang diperlukan pengunjung sebelum dialihkan ke URL tujuan.

    5. Opsi Redirect Fleksibel

    Pilih opsi redirect yang paling sesuai:

    • Otomatis: Pengguna langsung di-redirect ke URL asli setelah hitung mundur selesai.
    • Dengan Tombol: Mengharuskan pengguna untuk mengklik tombol yang muncul setelah hitung mundur selesai. Opsi ini memberikan interaksi lebih dengan pengguna dan lebih disukai untuk penempatan iklan.

    Kekurangan Safelink

    sessionStorage menawarkan solusi yang sangat ideal dan masuk akal untuk meningkatkan pengalaman pengguna sambil tetap menjaga fungsi monetisasi dan pageview situs.

    Namun bagaimanapun, penting untuk menyadari bahwa sessionStorage menciptakan keterbatasan tertentu yang mungkin tidak bisa ditoleransi oleh beberapa pengguna. Berikut beberapa kekurangan dari versi ini yang bisa Anda pertimbangkan:

    1. Pembatasan Sesi (Cross-Tab/Window Incompatibility)

    Mengacu pada sifat dasar sessionStorage yang hanya menyimpan data secara lokal dan terikat pada satu sesi browser atau tab tertentu, itu berarti:

    • Data Hilang saat Tab Ditutup: Jika pengguna menutup tab Safelink, atau jika tautan di Safari/Firefox secara otomatis membuka tab baru dan tab lama ditutup, data URL yang tersimpan di sessionStorage akan terhapus.
    • Tidak Berfungsi pada Jendela Baru: Jika pengguna mengklik kanan tautan Safelink dan memilih "Open link in new window" atau "Open link in new private/incognito window", sessionStorage dari sesi tab asal tidak akan ditransfer ke jendela baru tersebut, sehingga proses redirect gagal.

      Dalam skenario ini, meskipun pengguna berhasil diarahkan ke laman Safelink (/p/safelink.html?key=xxxx), kode tidak akan menemukan URL asli yang tersimpan di storage, dan proses redirect akan gagal.

    2. Tidak Cocok untuk Sesi Jangka Panjang

    sessionStorage didesain untuk sesi sementara. Jika Anda membutuhkan tautan Safelink yang tetap valid meskipun pengguna menutup browser dan membukanya kembali, metode ini tidaklah ideal.

    Solusi yang lebih baik adalah localStorage atau menggunakan parameter URL Base64 meskipun hanya merupakan encoding standar.


    Cara Memasang Safelink di Situs/Blog Utama

    Setelah memahami manfaat safelink, kini saatnya menerapkan safelink ke blog Anda. Panduan ini dibagi menjadi dua langkah yang disusun secara detail agar mudah untuk diikuti, bahkan oleh pemula.

    Langkah 1: Membuat Halaman Safelink

    Langkah pertama adalah membuat halaman yang akan digunakan sebagai halaman peralihan (safelink) di mana proses countdown dan redirect terjadi. Halaman ini tidak harus berupa halaman statis; Postingan biasa juga bisa digunakan.

    1. Buat Laman Baru: Dari dashboard Blogger, klik menu Halaman (atau Postingan) kemudian klik tombol + Halaman Baru.
    2. Tulis Konten: Tulis judul dan isi postingan seperti biasa. Anda bebas menulis topik apapun karena halaman ini akan tampil seperti artikel normal.
      Catatan: timer countdown tidak akan muncul jika halaman diakses tanpa kunci safelink.
    3. Sisipkan Blok Wajib: Tambahkan blog HTML di bawah ini pada awal postingan Anda (pastikan menggunakan mode tampilan HTML saat menyisipkan):
      <div id='safelink' hidden></div>

      Penting: kode ini adalah bagian krusial. Bertindak sebagai target (ID utama) yang akan dipanggil oleh kode JavaScript untuk menjalankan fungsi safelink.

    4. Simpan dan Salin URL: Simpan laman tersebut, lalu salin URL halaman safelink yang baru dibuat. Sebagai contoh, pada panduan ini kami menggunakan URL:
      https://www.your_domain.com/p/safelink.html
    5. Optimasi SEO: Agar halaman safelink lebih cepat terindeks di mesin pencari, tambahkan Deskripsi Penelusuran (Meta Description) yang bisa ditemukan pada sisi kanan bawah editor postingan. Pelajari cara membuat Meta Tag terbaik untuk membuat laman safelink ini lebih SEO-Friendly.

    Langkah 2: Menyisipkan Kode JavaScript dan CSS Safelink

    Kode safelink ini harus disisipkan di tema Anda agar semua outbound link (tautan eksternal) terdeteksi dan diarahkan ke laman safelink.

    Cara Mengedit HTML Tema Blogger:

    1. Dari dashboard Blogger, klik Tema.
    2. Klik ikon tepat di samping tombol SESUAIKAN.
    3. Menu dropdown akan muncul, pilih Edit HTML untuk membuka editor tema.
    4. Tempatkan kode JavaScript Safelink ini di bagian bawah kode HTML tema Anda:
    const config = {
        safeID = 'safelink',
        safeURL: ['/p/safelink.html'],
        processURL: ['drive.google.com', 'mega.nz'],
        timer: 15,
        redirect: true,
        text: {
            wait: 'The link will appear in 0 second',
            direct: 'You’ll be redirected to the download link in 0 second',
            shifted: 'Redirecting... [link] if you’re not redirected automatically.',
            click: 'Click here',
            btn: 'Direct to link.'
        }
    };
    (() => {
        const randomURL = url => url[Math.floor(Math.random() * url.length)];
        const randomKey = () => Math.random().toString(36).slice(2, 6);
        const getURL = () => JSON.parse(sessionStorage.getItem('safelink') || '[]');
        const setURL = data => sessionStorage.setItem('safelink', JSON.stringify(data));
        const clearURL = () => sessionStorage.removeItem('safelink');
        const safeLink = () => config.safeURL.some(link => location.pathname.endsWith(link));
        const safeMessage = (text, time) => {
            const [start, end] = text.split('0');
            return `<p>${start} <span>${time} ${end}</span>.</p>`;
        };
        const outboundLinks = () => {
            clearURL();
            const storage = [];
            document.querySelectorAll('a[href]').forEach(anchor => {
                if (!config.processURL.some(url => anchor.href.includes(url))) return;
                const key = randomKey();
                storage.push({key, url: btoa(anchor.href)});
                Object.assign(anchor, {
                    href: `${location.origin}${randomURL(config.safeURL)}?key=${key}`,
                    target: '_self'
                })
            });
            if (storage.length) setURL(storage)
        };
        const handleLink = () => {
            const params = new URLSearchParams(location.search);
            const key = params.get('key');
            if (!key) return;
            params.delete('key');
            history.replaceState({}, '', location.pathname + (params.toString() ? '?' + params : ''));
            const storage = getURL();
            const entry = storage.find(item => item.key === key);
            if (!entry) return;
            let counter = config.timer;
            const link = atob(entry.url);
            const label = config.redirect ? config.text.direct : config.text.wait;
            const box = document.getElementById(config.safeID);
            if (!box) return;
            box.removeAttribute('hidden');
            box.innerHTML = safeMessage(label, counter);
            const countdown = setInterval(() => {
                counter--;
                box.innerHTML = safeMessage(label, counter);
                if (counter > 0) return;
                clearInterval(countdown);
                const clearKey = () => setURL(storage.filter(e => e.key !== key));
                if (config.redirect) {
                    box.innerHTML = `<p>${config.text.shifted.replace('[link]', `<a href='${link}' target='_blank' rel='nofollow noopener noreferrer'>${config.text.click}</a>`)}</p>`;
                    clearKey();
                    location.href = link;
                } else {
                    box.innerHTML = '';
                    const btn = document.createElement('a');
                    //btn.className = 'btn';
                    btn.href = link;
                    btn.target = '_blank';
                    btn.rel = 'nofollow noopener noreferrer';
                    btn.innerHTML = `<span>${config.text.btn}</span>`;
                    btn.addEventlinkener('click', clearKey);
                    box.appendChild(btn);
                }
            }, 1000)
        };
        safeLink() ? handleLink() : outboundLinks();
    })();

    Praktik terbaik: Tempatkan kode JavaScript Safelink tepat sebelum tag penutup </body> untuk memastikan kecepatan loading konten utama tidak terganggu.

    Kode JavaScript ini ditulis tanpa kompresi. Variable dan Fungsi-fungsinya disusun untuk mudah dibaca dan dipelajari, bagaimanapun Anda bisa mengoptimalkannya dengan tool online yang tersedia untuk mengurangi ukuran dan peningkatan performa.


    Penyesuaian dan Konfigurasi Kode Safelink

    Sebelum menyimpan hasil pengeditan, sesuaikan bagian-bagian yang ditandai pada kode di atas dengan setelan situs Anda.

    Variable Penjelasan
    safeID ID utama safelink. Harus sesuai dengan ID yang ditulis di laman safelink, dalam hal ini kami menggunakan #safelink mengacu pada <div id='safelink' hidden>.
    safeURL Wajid Diubah! Daftar laman safelink yang Anda miliki, cukup tulis path-nya saja (tanpa nama domain). Contoh: jika URL Anda seperti ini https://www.your_domain.com/p/safelink.html, maka cukup tulis /p/safelink.html. Anda bisa menambahkan beberapa URL sekaligus.
    processURL Daftar URL yang akan diarahkan ke laman safelink, tautan eksternal selain dalam daftar ini akan diabaikan. Untuk menambahkan URL baru, pastikan URL ditulis di antara tanda kutip tunggal (' ') dan dipisah dengan koma (,). Contoh: ['drive.google.com', 'mega.nz', 'url_baru', 'url_baru'].
    timer Waktu hitung mundur (dalam detik) sebelum redirect dimulai.
    redirect Opsi untuk mengaktifkan redirect langsung ke laman asli setelah hitung mundur. Jika disetel false maka fungsi redirect akan diganti dengan tombol yang harus diklik pengguna secara manual (opsi ini lebih baik jika ingin fokus pada AdSense).
    text Kumpulan teks bawaan yang muncul dalam safelink. Sesuaikan teks ini agar selaras dengan bahasa situs Anda.

    Setelah menyimpan hasil pengeditan, lakukan pengujian langsung dengan mengklik tautan yang ada dalam daftar processURL pada situs Anda untuk memastikan fungsi safelink berjalan dengan sempurna.

    Menambahkan Kode CSS (Opsional)

    Secara fungsional, kode Safelink Anda sudah berjalan dengan baik. Penambahan CSS ini bersifat opsional hanya untuk memberikan sentuhan visual seperti mengubah ukuran font, warna dan jarak konten dengan blok safelink.

    #safelink {
        display: flex;
        justify-content: center;
        min-height: 45dvh;
        padding-block-start: 11dvh
    }
    .safelink p {
        margin: 0;
        font-weight: 500;
        font-size: clamp(1.45rem, 1.1855rem + 0.6612vw, 1.75rem);
        text-align: center;
        text-wrap: balance
    }

    Anda dapat mengabaikan bagian ini jika hanya fokus pada fungsi, atau Anda dapat membuat style CSS sendiri sesuai dengan tema blog Anda. Kode di atas tidak menyertakan gaya khusus untuk tombol redirect karena setiap tema biasanya sudah memiliki gaya tombol bawaan.

    Tips: Untuk mengadopsi gaya tombol tema Anda, cukup tambahkan className yang cocok dengan gaya tombol Anda, misalnya: <a class='btn'> atau <a class='button-primary'>.


    Pelajari Alur Fungsi Kode Safelink (Tingkat Lanjut)

    Anda mungkin penasaran bagaimana kode safelink ini bekerja dengan begitu ringkas namun penuh dengan fitur baru. Jika dibandingkan dengan versi sebelumnya, versi ini jauh lebih efisien, memanfaat JavaScript modern dan mengoptimalkan User Experience (UX) melalui URL yang bersih.

    Sebagai bahan pembelajaran, berikut detail bagaimana setiap baris kode dijalankan. Pemahaman ini mungkin berguna untuk Anda yang ingin memperbaiki, menyempurnakan atau menambahkan fitur baru dalam kode ini.

    Fungsi-fungsi Dasar (Fungsi Pembantu)

    Kode ini dikemas dalam Immediately Invoked Function Expression (IIFE), yaitu (() => { ... })(); yang bekerja dengan cara mengeksekusi kode seketika saat halaman dimuat.

    Fungsi Peranan dalam safelink
    randomURL Berfungsi untuk memanggil laman safelink secara acak. Daftar laman yang dikumpulkan dalam safeURL akan diacak untuk memastikan tidak ada URL yang sama dipanggil dalam satu halaman.
    randomKey Menghasilkan kode acak (4 digit) yang bertindak sebagai kunci penghubung dengan URL asli yang tersimpan di sessionStorage.
    getURL, setURL, clearURL Bertanggung jawab penuh untuk mengelola data URL asli (mendapatkan, menyimpan dan menghhapus) dari sessionStorage.
    safeLink Mendeteksi halaman yang sedang dibuka oleh pengguna, mengembalikan nilai true jika halaman yang dibuka adalah salah satu dari laman yang terdaftar di safeURL.
    Fungsi Utama

    Terbagi dalam dua fungsi utama yang masing-masing bekerja untuk mengganti semua tautan eksternal yang tergabung dalam processURL dan menangani redirect pada laman safelink.

    Fungsi Utama di Laman Postingan (outboundLinks())

    Bertanggung jawab penuh untuk mengubah URL tautan eksternal yang terdaftar di dalam processURL dan mengalihkannya ke laman safelink.

    1. Fungsi dimulai dengan clearURL(), membersihkan data safelink (yang tersimpan dalam sessionStorage) dari sesi sebelumnya, memastikan tidak ada data lama yang tersisa.
    2. Variable (storage) dibuat sebagai wadah sementara untuk menyimpan kunci dan URL asli sebelum dipindahkan ke sessionStorage.
    3. Mencari semua tautan dalam halaman (tag <a>), kemudian memilah URL yang sesuai dengan daftar di processURL. Jika tidak ditemukan satupun, proses berhenti disini.
    4. Tautan asli di-enkripsi menggunakan Base64 sekaligus membuat kunci acak (randomKey()). Keduanya disimpan dalam variabel storage.
    5. Mengubah tautan asli menjadi URL Safelink yang telah dipilih secara acak (randomURL()) ditambah dengan parameter kunci unik: (?key=xxx).
    6. Seluruh data yang tersimpan dalam variable storage (yang berisi pasangan kunci dan URL ter-enkripsi) dipindah ke sessionStorage.

      Penggunaan sessionStorage membuat URL yang ditampilkan menjadi lebih ringkas, bukan lagi URL panjang yang berisi URL asli yang ter-enkripsi. Hal ini secara signifikan meningkatkan Pengalaman Pengguna (UX) yang lebih baik.


    Fungsi Utama di Laman Safelink (handleLink())

    Fungsi ini berjalan saat pengguna mendarat di laman safelink dan bertugas menyelesaikan proses redirect.

    1. Verifikasi Kunci dan Pembersihan URL: Pertama-tama fungsi akan mendeteksi apakah terdapat parameter ?key=xxxx pada URL safelink. Jika kunci tidak ditemukan, maka proses dihentikan. Sebaliknya, baris berikutnya akan dijalankan dan parameter ?key=xxxx langsung dihapus dari address bar menggunakan history.replaceState untuk menjaga URL tetap bersih.
    2. Pengambilan Data: Variable baru dibuat dengan nama yang sama (storage) tapi kali ini berfungsi untuk mendapatkan URL asli yang ter-enkripsi. Jika parameter ?key=xxxx ada dalam URL tapi tidak ditemukan di sessionStorage maka fungsi berhenti dijalankan.
    3. Inisiasi Countdown: Blok safelink ditampilkan dan hitung mundur dimulai dengan mengambil durasi dari konfigurasi timer.
    4. Aksi Setelah Countdown: Setelah hitung mundur selesai, aksi akan ditentukan berdasarkan nilai redirect:
      • Jika redirect: true, maka kunci dihapus dari sessionStorage (jalankan fungsi clearKey()) dan pengguna langsung dialihkan ke tautan asli menggunakan location.href = link.
      • jika redirect: false, maka kode menampilkan tombol Call-to-Action (CTA) yang berisi tautan asli. Jika diklik, kunci dari sessionStorage akan dihapus, memastikan proses selesai.
    Penentuan Arah Eksekusi (Logika Utama)

    Baris terakhir adalah inti dari alur kerja kode ini. Logika pada baris ini menentukan fungsi mana yang akan dijalankan berdasarkan lokasi pengguna.

    safeLink() ? handleLink() : outboundLinks();
    • Jika pengguna berada di laman safelink, maka jalankan fungsi handleLink().
    • Jika tidak (pengguna berada di laman biasa), maka outboundLinks() dijalankan.

    Write your response.

    Untuk menghindari SPAM, semua komentar akan dimoderasi sebelum ditampilkan.