Website statis modern lebih cepat dan aman dari website dinamis, tetapi tetap memerlukan optimasi performa dan langkah keamanan yang tepat. Artikel ini membahas cara mengoptimasi performa dan mengamankan website statis modern yang dihosting di GitHub dan Vercel.
Pengertian Performa dan Keamanan Website Statis
Meskipun website statis secara alami lebih cepat dan aman dibanding website dinamis, optimasi lebih lanjut masih diperlukan untuk pengalaman pengguna yang terbaik dan perlindungan terhadap serangan canggih.
Mengapa Perlu Optimasi Lebih Lanjut?
- Core Web Vitals: Google mengukur performa melalui LCP, FID, CLS
- Peringkat SEO: Website lambat mendapat peringkat lebih rendah
- Pengalaman Pengguna: Pengguna meninggalkan website yang lambat
- Keamanan CDN: CDN bisa menjadi target serangan DDoS
- Supply Chain: Dependency yang terinfeksi bisa mengompromikan website
Alat yang Dibutuhkan
- Website statis yang sudah di-deploy di Vercel/GitHub
- Akses ke GitHub dan Vercel Dashboard
- Lighthouse (gratis di Chrome DevTools)
- Tidak perlu server khusus
Optimasi Performa
1. Image Optimization
// Next.js Image Optimization
import Image from 'next/image';
<Image
src="/m.png"
alt="Masyarakat Logo"
width={56}
height={56}
priority
placeholder="blur"
blurDataURL="data:image/svg+xml;base64,..."
/>
// Gambar hero dengan responsive sizes
<Image
src="/og.png"
alt="Masyarakat Banner"
width={1200}
height={630}
sizes="(max-width: 768px) 100vw, 50vw"
quality={90}
/>Format modern:
# Konversi semua gambar ke WebP/AVIF
# Next.js otomatis menggunakan format modern2. Code Splitting dan Lazy Loading
// Lazy load komponen berat
import dynamic from 'next/dynamic';
const HeavyComponent = dynamic(() => import('../components/HeavyComponent'), {
ssr: false,
loading: () => <p>Loading...</p>,
});
// Lazy load images di bawah fold
import Image from 'next/image';
<Image src="/footer-bg.jpg" loading="lazy" alt="Footer" />3. Font Optimization
/* Font display swap untuk font yang lebih cepat */
@font-face {
font-family: 'Geist';
src: url('https://cdn.jsdelivr.net/npm/[email protected]/dist/fonts/geist-sans/Geist-Regular.woff2') format('woff2');
font-display: swap;
font-weight: 400;
}
/* Preload font kritis */
<link rel="preload" href="/fonts/Geist-Regular.woff2" as="font" type="font/woff2" crossorigin>4. CSS Optimization
/* Tailwind CSS purge */
// next.config.js
module.exports = {
compiler: {
removeConsole: process.env.NODE_ENV === 'production',
},
};
// Critical CSS inline
// .next/optimized.css (hanya CSS yang diperlukan untuk above-the-fold)5. Caching Strategy
// vercel.json — Cache headers
{
"headers": [
{
"source": "/images/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" },
{ "key": "Content-Type", "value": "image/webp" }
]
},
{
"source": "/static/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
},
{
"source": "/(.*).html",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=0, must-revalidate" }
]
}
]
}6. CDN Optimization
Vercel secara otomatis menggunakan CDN global:
Vercel CDN: 30+ lokasi di seluruh dunia
First byte response: < 100ms
Edge caching: Otomatis7. Core Web Vitals Optimization
| Metrik | Target | Cara Optimasi |
|---|---|---|
| LCP | < 2.5s | Image optimization, font preload, CDN |
| INP | < 200ms | Code splitting, minimize JavaScript |
| CLS | < 0.1 | Resize images, reserve space for ads |
| FCP | < 1.8s | Critical CSS inline, preload |
| TTI | < 3.8s | Minimize JavaScript, code splitting |
8. Audit Performa Berkala
# Install Lighthouse CI
npm install -g @lhci/cli
# Run audit
lhci autorun
# Hasil akan ditampilkan dengan skorAtau gunakan GitHub Action:
# .github/workflows/lighthouse.yml
name: Lighthouse Audit
on: [push]
jobs:
lighthouse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: treosh/lighthouse-ci-action@v9
with:
urls: 'https://masyarakat.id/'
uploadArtifacts: true
temporaryPublicStorage: trueKeamanan Website Statis
1. HTTPS dan Security Headers
// vercel.json — Security Headers
{
"headers": [
{
"source": "/(.*)",
"headers": [
// HSTS — enforce HTTPS
{
"key": "Strict-Transport-Security",
"value": "max-age=63072000; includeSubDomains; preload"
},
// Prevent XSS
{
"key": "X-Content-Type-Options",
"value": "nosniff"
},
// Prevent clickjacking
{
"key": "X-Frame-Options",
"value": "DENY"
},
// XSS Protection
{
"key": "X-XSS-Protection",
"value": "1; mode=block"
},
// Content Security Policy
{
"key": "Content-Security-Policy",
"value": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'"
},
// Referrer Policy
{
"key": "Referrer-Policy",
"value": "strict-origin-when-cross-origin"
},
// Permissions Policy
{
"key": "Permissions-Policy",
"value": "camera=(), microphone=(), geolocation=()"
}
]
}
]
}2. Perlindungan DDoS
Vercel menyediakan perlindungan DDoS bawaan:
- Rate limiting otomatis
- Bot detection
- Traffic analysis
- Automatic mitigation
// vercel.json — Additional protection
{
"crons": [
{
"path": "/api/health",
"schedule": "*/1 * * * *"
}
]
}3. Amanatkan Environment Variables
# Jangan pernah commit .env ke GitHub
# Gunakan Vercel Environment Variables
# Set di Vercel Dashboard
vercel env add BOT_TOKEN production
vercel env add DATABASE_URL production4. Supply Chain Security
// package.json — Lock dependencies
{
"packageManager": "[email protected]",
"overrides": {
"some-vulnerable-package": "^2.0.0"
}
}# Audit dependencies berkala
npm audit
npm audit fix
# Gunakan npm ci untuk install yang deterministic
npm ci5. GitHub Security Features
Aktifkan di GitHub repository settings:
Settings → Security & Analysis:
✓ Dependabot alerts (otomatis deteksi vulnerability)
✓ Dependabot security updates (otomatis fix)
✓ Secret scanning (deteksi secret key di commit)
✓ Code scanning (analisis kode)
✓ Require signed commits6. Monitoring Keamanan
# Vercel Analytics — monitor traffic anomaly
vercel analytics
# GitHub Actions — security scan otomatis
# Setiap push menjalankan:
# - npm audit
# - Lighthouse security audit
# - Secret scanning7. Backup dan Recovery
# Backup GitHub repository
# Repository sudah menjadi backup Anda
# GitHub menyimpan seluruh riwayat commit
# Export Vercel configuration
vercel --git-deployment-url
# Backup build output
vercel buildMonitoring dan Alerting
1. Vercel Analytics
# Install Vercel Analytics
npm install @vercel/analytics// app/layout.tsx
import { Analytics } from '@vercel/analytics/react';
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics />
</body>
</html>
);
}2. Uptime Monitoring
# Uptime Robot atau Checkly
# Monitor website 24/7
# Alert jika website down3. Performance Monitoring
// Web Vitals tracking
import { onCLS, onINP, onLCP } from 'web-vitals';
function sendToAnalytics(metric) {
console.log(metric.name, metric.value);
}
onCLS(sendToAnalytics);
onINP(sendToAnalytics);
onLCP(sendToAnalytics);Kesimpulan
Website statis modern yang dioptimasi dengan baik memberikan performa dan keamanan yang excellent. Dengan Vercel's CDN, security headers, image optimization, dan monitoring berkala, website Anda akan cepat, aman, dan selalu tersedia.
Kunci utama:
- Optimasi image dengan format modern (WebP/AVIF)
- Lazy loading dan code splitting untuk JavaScript
- Security headers (HSTS, CSP, X-Frame-Options)
- HTTPS dan environment variables yang aman
- Dependabot dan npm audit untuk supply chain security
- Monitoring performa dengan Lighthouse dan Web Vitals
- Uptime monitoring untuk ketersediaan
- Backup repository sebagai recovery plan
Catatan penting: Jangan pernah menempatkan secret key, API token, atau credentials di kode sumber yang di-commit ke GitHub. Selalu gunakan Environment Variables di Vercel Dashboard. Security headers harus diaktifkan sebelum website di-deploy ke produksi. Content Security Policy (CSP) perlu disesuaikan dengan kebutuhan website Anda — jika CSP terlalu ketat, beberapa fitur mungkin tidak berfungsi. Test CSP dalam mode "report-only" terlebih dahulu sebelum mengaktifkan mode enforcement penuh.
Ingat: Keamanan website adalah proses berkelanjutan, bukan satu kali setup. Ancaman keamanan berubah setiap hari, dan Anda harus selalu memperbarui dependency, memantau log, dan meninjau security headers secara berkala. Website statis memang lebih aman dari website dinamis, tetapi bukan berarti kebal terhadap serangan. Dependency yang usang, misconfiguration, dan human error tetap bisa membahayakan website Anda. Jaga kewaspadaan Anda.
Dipublikasikan untuk membantu para administrator dan developer website dalam mengoptimasi performa dan mengamankan website statis modern.