Skip to main content
Back to blog

Panduan SEO Langkah 7: Keselamatan — Titik Dasar yang Diharapkan Google pada 2026

·12 min read·by LANGR SEO

Panduan SEO Langkah 7: Keselamatan

Ini adalah Langkah 7 dari Panduan SEO 13 Langkah. Keselamatan bukan hanya tentang melindungi pengguna — ia secara langsung memberi kesan kepada kedudukan carian anda. Google telah menggunakan HTTPS sebagai isyarat kedudukan sejak 2014, dan harapan hanya semakin meningkat.


Kebanyakan pemilik laman beranggapan keselamatan sebagai sesuatu yang binari: "Kami ada SSL, jadi kami selamat." Sebenarnya, Google menilai puluhan isyarat keselamatan. Laman-laman dengan header keselamatan yang betul, sijil yang sah, dan tiada kandungan bercampur mengatasi laman-laman yang hanya mempunyai sijil SSL asas — semua yang lain adalah sama.

Berita baik: kebanyakan pembetulan keselamatan adalah konfigurasi sekali sahaja. Tetapkan sekali, dan ia melindungi kedudukan anda secara kekal.

Konfigurasi SSL

SSL (secara teknikalnya TLS) menyulitkan sambungan antara pelayan anda dan pengunjung. Sejak 2014, Google telah mengesahkan secara jelas HTTPS sebagai isyarat kedudukan. Pada 2026, tidak mempunyai HTTPS bukan hanya isu kedudukan — Chrome menandakan laman HTTP sebagai "Tidak Selamat" di bar alamat, merosakkan kepercayaan pengguna.

Keperluan untuk SSL yang betul:

| Keperluan | Kenapa | Cara Semak | |-----------|--------|------------| | Sijil yang sah | Tamat tempoh = amaran pelayar = pengguna keluar | Semak tarikh tamat | | Rantaian penuh | Rantaian yang tidak lengkap gagal pada beberapa peranti | Ujian SSL Labs | | TLS 1.2+ | Versi lama mempunyai kerentanan yang diketahui | Ujian SSL Labs | | Tiada SHA-1 | Tidak lagi digunakan, pelayar menolak | Butiran sijil | | Liputan SAN | www dan non-www mesti kedua-duanya diliputi | Butiran sijil | | Pembaharuan automatik | Mencegah bencana tamat tempoh | Konfigurasi Let's Encrypt / penyedia |

Skor SSL:

100% = Sijil sah + Rantaian penuh + TLS 1.3 + Cipher kuat + Pembaharuan automatik
  0% = Sijil tamat atau tiada

Kesalahan umum SSL:

  1. Sijil tamat tanpa notis — Tetapkan pemantauan (Langkah 6) sekurang-kurangnya 30 hari sebelum tamat
  2. Rantaian sijil tidak lengkap — Pelayan mesti menghantar sijil pertengahan, bukan hanya daun
  3. Kandungan bercampur — Halaman HTTPS memuatkan sumber HTTP (imej, skrip, stylesheet)
  4. Gelung pengalihan — Kitaran HTTP → HTTPS → HTTP disebabkan CDN/proksi yang salah konfigurasi
  5. Ketidakpadanan non-www vs www — Sijil meliputi satu tetapi tidak yang lain

Kemenangan segera: Jalankan domain anda melalui SSL Labs (ssllabs.com/ssltest). Apa-apa di bawah penilaian "A" mempunyai isu yang boleh ditangani. Kebanyakan penyedia hosting membetulkan ini dengan satu klik.

Header Keselamatan

Header keselamatan adalah header respons HTTP yang memberi arahan kepada pelayar bagaimana untuk bertindak semasa memuatkan laman anda. Mereka mencegah keseluruhan kategori serangan — dan crawler Google memeriksa mereka.

Header keselamatan yang penting:

Dasar Keselamatan Kandungan (CSP)

CSP adalah header keselamatan yang paling berkuasa. Ia memberitahu pelayar dengan tepat sumber mana (skrip, gaya, imej, fon) yang dibenarkan dimuat pada halaman anda.

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://api.example.com; frame-ancestors 'none';

Apa yang mencegah CSP:

  • Serangan skrip silang (XSS)
  • Serangan suntikan data
  • Klik jacking (melalui frame-ancestors)
  • Pelaksanaan skrip tanpa kebenaran (cryptominers, ad injectors)

Strategi penerapan CSP:

  1. Mulakan dengan Content-Security-Policy-Report-Only (log pelanggaran tanpa menyekat)
  2. Pantau laporan selama 1-2 minggu
  3. Putuskan sumber yang sah
  4. Beralih kepada mod penguatkuasaan
  5. Tambah report-uri atau report-to untuk log pelanggaran yang berterusan

Pilihan X-Frame

Mencegah laman anda daripada disematkan dalam iframe di domain lain (perlindungan klik jacking).

X-Frame-Options: DENY

Atau jika anda perlu membenarkan rangka sama asal:

X-Frame-Options: SAMEORIGIN

Pilihan Jenis X-Content

Mencegah pelayar daripada mencium jenis MIME (mentafsir fail sebagai jenis yang berbeza daripada yang dinyatakan).

X-Content-Type-Options: nosniff

Baris ini mencegah serangan di mana fail .jpg mengandungi JavaScript tersembunyi yang mungkin dilaksanakan oleh pelayar.

Dasar Referrer

Mengawal berapa banyak maklumat referrer yang dihantar apabila pengguna mengklik pautan dari laman anda.

Referrer-Policy: strict-origin-when-cross-origin

Ini menghantar URL penuh untuk permintaan sama asal tetapi hanya asal (domain) untuk permintaan silang asal. Menyeimbangkan keperluan analitik dengan privasi.

Dasar Kebenaran

Mengawal ciri pelayar mana (kamera, mikrofon, geolokasi, dll.) yang boleh digunakan di laman anda.

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

Menonaktifkan ciri yang tidak anda gunakan mencegah skrip pihak ketiga daripada menyalahgunakannya.

Contoh penerapan header (Next.js):

// next.config.js
module.exports = {
  async headers() {
    return [{
      source: '/(.*)',
      headers: [
        { key: 'X-Content-Type-Options', value: 'nosniff' },
        { key: 'X-Frame-Options', value: 'SAMEORIGIN' },
        { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
        { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
        { key: 'Strict-Transport-Security', value: 'max-age=31536000; includeSubDomains; preload' },
      ]
    }]
  }
}

Penerapan header (Apache .htaccess):

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Penerapan header (Nginx):

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Kemenangan segera: Tambahkan semua 5 header di atas kepada konfigurasi pelayan anda. Ini mengambil masa 5 minit dan segera meningkatkan kedudukan keselamatan anda dalam mana-mana alat pemindaian.

Pra-muat HSTS

Keselamatan Pengangkutan Ketat HTTP (HSTS) memberitahu pelayar untuk sentiasa menggunakan HTTPS untuk domain anda — bahkan sebelum permintaan pertama. Tanpa HSTS, lawatan pertama ke laman anda mungkin masih menggunakan HTTP (terdedah kepada pengintipan) sebelum pengalihan ke HTTPS berlaku.

Header HSTS:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Tiga arahan:

| Arahan | Maksud | |--------|--------| | max-age=31536000 | Ingat ini selama 1 tahun (dalam detik) | | includeSubDomains | Terapkan juga kepada semua subdomain | | preload | Meminta penyertaan dalam senarai muat sebelum pelayar |

Senarai muat HSTS:

Perlindungan HSTS yang terbaik. Pelayar menyediakan senarai domain terbina yang mesti sentiasa menggunakan HTTPS. Menghantar domain anda ke hstspreload.org bermakna:

  • Pengunjung pertama mendapat HTTPS dengan serta-merta (tiada pengalihan HTTP → HTTPS)
  • Mustahil bagi penyerang untuk menurunkan sambungan
  • Kekal (sukar untuk dikeluarkan setelah dihantar)

Keperluan untuk muat HSTS:

  1. Sijil HTTPS yang sah
  2. Alih semua HTTP kepada HTTPS (termasuk subdomain)
  3. Header HSTS dengan max-age >= 31536000
  4. Header HSTS termasuk includeSubDomains
  5. Header HSTS termasuk preload
  6. Semua subdomain mesti menyokong HTTPS

Amaran: Hanya hantar kepada pra-muat jika SEMUA subdomain anda menyokong HTTPS. Arahan includeSubDomains bermakna mana-mana subdomain yang hanya menggunakan HTTP akan menjadi tidak boleh diakses.

Kemenangan segera: Jika anda sudah mempunyai HTTPS di semua subdomain, tambahkan header HSTS penuh dan hantar ke hstspreload.org. Prosesnya mengambil masa beberapa minggu tetapi perlindungannya adalah kekal.

Pengimbasan Kerentanan

Pengimbasan kerentanan secara automatik mengenal pasti isu keselamatan yang diketahui dalam tumpukan anda sebelum penyerang memanfaatkannya.

Apa yang diperiksa oleh pengimbasan kerentanan:

  • Perisian yang ketinggalan zaman: WordPress, plugin, perpustakaan JavaScript dengan CVE yang diketahui
  • Fail terdedah: .env, .git, wp-config.php, eksport database
  • Kebocoran maklumat: Header versi pelayan, mod debug, jejak tumpukan
  • Kelayakan lalai: Halaman admin tanpa pengesahan, kata laluan lalai
  • Port/perkhidmatan terbuka: Perkhidmatan yang tidak perlu terdedah kepada internet
  • Poin suntikan: Borang tanpa perlindungan CSRF, input yang tidak disahkan

Kerentanan umum mengikut platform:

| Platform | Kerentanan Utama | Pembetulan | |----------|-------------------|------------| | WordPress | Plugin ketinggalan zaman | Kemas kini automatik + WAF | | Shopify | Kebenaran aplikasi pihak ketiga | Audit senarai aplikasi setiap suku tahun | | Next.js | Rute API terdedah | Middleware pengesahan + had kadar | | Laman statik | Salah konfigurasi CDN | Semak peraturan cache | | Peribadi | Suntikan SQL | Pertanyaan parameter |

Frekuesi mengimbas:

  • Harian: Pengimbasan permukaan automatik (SSL, header, fail terdedah)
  • Mingguan: Semakan kerentanan ketergantungan (npm audit, pengimbas plugin WordPress)
  • Bulanan: Pengimbasan mendalam dengan ujian yang disahkan
  • Selepas setiap penerapan: Semakan regresi

Kemenangan segera: Jalankan npm audit (Node.js) atau semak senarai plugin CMS anda untuk komponen yang ketinggalan zaman. Betulkan isu kritikal/tinggi dengan segera.

Kandungan Bercampur

Kandungan bercampur berlaku apabila halaman HTTPS memuat sumber (imej, skrip, stylesheet, iframe) melalui HTTP. Ini secara separa memecahkan penyulitan dan mencetuskan amaran pelayar.

Jenis kandungan bercampur:

| Jenis | Keterukan | Contoh | Tingkah Laku Pelayar | |-------|-----------|--------|----------------------| | Aktif | Tinggi | Skrip HTTP, iframe, CSS | Dihalang secara lalai | | Pasif | Sederhana | Imej HTTP, video, audio | Dimuat dengan amaran |

Kandungan bercampur aktif dihalang oleh pelayar moden — ini bermakna skrip dan gaya anda tidak akan dimuat. Kandungan bercampur pasif dimuat tetapi menunjukkan amaran keselamatan.

Mencari kandungan bercampur:

  1. Buka Chrome DevTools → Konsol
  2. Cari amaran "Kandungan Bercampur"
  3. Sebagai alternatif, imbas dengan crawler (Screaming Frog, LANGR)

Sumber kandungan bercampur yang biasa:

  • URL http:// yang dikodkan keras dalam kandungan (post blog, keterangan produk)
  • Widget pihak ketiga yang memuat sumber HTTP
  • Kandungan yang disematkan (embed lama YouTube, widget media sosial)
  • CSS background-image dengan URL HTTP
  • Fon yang dimuat melalui HTTP

Memperbaiki kandungan bercampur:

<!-- Buruk -->
<img src="http://example.com/image.jpg" />

<!-- Baik -->
<img src="https://example.com/image.jpg" />

<!-- Terbaik (relatif-protokol, menyesuaikan dengan protokol halaman) -->
<img src="//example.com/image.jpg" />

Pembetulan pangkalan data (WordPress):

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://yourdomain.com', 'https://yourdomain.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://yourdomain.com', 'https://yourdomain.com');

Kemenangan segera: Buka halaman utama anda di Chrome, tekan F12, periksa tab Konsol untuk amaran kandungan bercampur. Betulkan mana-mana yang muncul — ini adalah langsung boleh dilihat oleh Google.

Risiko Skrip Pihak Ketiga

Setiap skrip luaran yang anda muat adalah liabiliti potensi keselamatan (dan prestasi). Skrip pihak ketiga boleh:

  • Terjejas (serangan rantaian bekalan)
  • Menjejak pengguna anda tanpa persetujuan (pelanggaran GDPR)
  • Melambatkan laman anda (menghalang rendering, kelewatan rangkaian)
  • Merosakkan fungsi (kemas kini versi, gangguan)
  • Menyuntik kandungan yang tidak diingini (skrip iklan yang salah)

Audit skrip pihak ketiga anda:

| Skrip | Perlu? | Tahap Risiko | Alternatif | |-------|--------|--------------|------------| | Google Analytics | Sering ya | Rendah | Penjejakan di sisi pelayan | | Widget sembang | Mungkin | Sederhana | Penyelesaian yang dihoskan sendiri | | Butang kongsi sosial | Jarang | Sederhana | Pautan kongsi statik | | Ujian A/B | Kadang-kadang | Tinggi | Ujian di sisi pelayan | | Pixel retargeting | Keputusan perniagaan | Tinggi | Data pihak pertama | | CDN fon | Mudah | Rendah | Fon dihoskan sendiri |

Pengurangan risiko untuk skrip pihak ketiga yang penting:

  1. Integriti Subresource (SRI): Pengesahan hash mencegah skrip yang telah diubah suai daripada dimuat
<script src="https://cdn.example.com/lib.js"
        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxAE+sO0..."
        crossorigin="anonymous"></script>
  1. Sekatan CSP: Hanya benarkan skrip dari domain yang diketahui
  2. iframe tanpa bingkai: Memisahkan widget pihak ketiga
  3. Audit berkala: Semakan setiap sumber luaran setiap suku tahun
  4. Pemantauan: Amaran di domain luar baru yang muncul di halaman anda

Kemenangan segera: Senaraikan setiap tag