Proteggi staging e preview da indicizzazione e accesso non autorizzato
One-time pack self-hosted: noindex guard + preview gate + canonical guard + PR Gate + report firmato
Per chi è
- Team che usano preview deployments (Vercel, Netlify, Cloudflare Pages)
- Progetti con staging accessibili pubblicamente
- Organizzazioni che vogliono prevenire indicizzazione di contenuti non finali
- Team che necessitano di link condivisibili temporanei per preview
Cosa previene
- Indicizzazione di staging: Google e altri motori di ricerca che indicizzano preview/staging non finali.
- Accesso non autorizzato: Preview deployments accessibili pubblicamente senza protezione.
- Canonical errati: Link canonical che puntano a staging invece che produzione.
- Duplicati SEO: Contenuti duplicati tra staging e produzione che penalizzano SEO.
Cosa include
- robots.txt + X-Robots-Tag — noindex,nofollow per staging/preview + meta robots patcher
- Preview Gate — Edge middleware che richiede token (header o query), link condivisibili con scadenza
- Canonical Guard — Forza canonical a produzione su staging/preview
- Header/config generator — Per Vercel, Netlify, Cloudflare
- GitHub Action PR Gate — Verifica che staging/preview non siano indicizzabili
- Report HTML firmato — SHA-256 + PR template
Compatibilità
Integrazioni:
GitHub Actions
Vercel
Netlify
Cloudflare
Piattaforme: Vercel, Netlify, Cloudflare Pages
Metodi: robots.txt, X-Robots-Tag, meta robots, Preview Gate middleware
CI/CD: GitHub Actions
Installazione in 10 minuti
bash
# 1. Installa il pack
npm install --save-dev @merlonsec/stageshield
# 2. Crea policy.yml
cat > policy.yml << EOF
stageshield:
environments:
staging:
noindex: true
preview_gate: true
canonical_guard: true
token_env: STAGING_PREVIEW_TOKEN
preview:
noindex: true
preview_gate: true
canonical_guard: true
token_env: PREVIEW_TOKEN
token_expiry: 7d
production:
noindex: false
preview_gate: false
EOF
# 3. Aggiungi middleware (esempio Vercel)
# middleware.ts
import { stageShield } from '@merlonsec/stageshield/vercel';
export default stageShield({
token: process.env.PREVIEW_TOKEN,
environments: ['preview', 'staging']
});
# 4. Aggiungi GitHub Action
mkdir -p .github/workflows
cat > .github/workflows/stageshield.yml << EOF
name: StageShield Check
on: [pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: merlonsec/stageshield-action@v1
with:
policy: ./policy.yml
EOF Security model / Non-obiettivi
Scope: StageShield previene solo indicizzazione e accesso non autorizzato a preview/staging. Non è un sistema di autenticazione completo o un WAF.
Non è:
- Un sistema di autenticazione utente completo (solo token-based preview gate)
- Un WAF o protezione DDoS
- Una garanzia SEO al 100% (i motori di ricerca possono comunque trovare link, ma rispettano noindex)
- Un servizio hosted (tutto locale)
È:
- Deterministico: stessa configurazione = stesso comportamento
- Standard-compliant: robots.txt, X-Robots-Tag, canonical tags
- Verificabile: report firmati SHA-256
Esempio
Vedi un esempio completo con preview gate configurato e test.
Oppure scarica un report di esempio.