...

🗂️ Breadcrumbs + 🔒 Security Headers

Código completo listo para copiar: Breadcrumbs con Schema + Headers de seguridad para Apache y Nginx

🗂️ Breadcrumbs Completo (HTML + CSS + Schema)

Sistema de navegación breadcrumb semántico, responsive y con Schema integrado. IA usa esto para entender jerarquía de tu sitio.

1. CSS (Agregar a style.css)

/* ==========================================
   BREADCRUMBS - Estilos Responsive
   ========================================== */

.breadcrumbs {
  font-size: 14px;
  color: #64748b;
  padding: 15px 0;
  margin-bottom: 20px;
}

.breadcrumbs nav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}

.breadcrumbs ol {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  padding: 0;
  margin: 0;
  gap: 8px;
  align-items: center;
}

.breadcrumbs li {
  display: flex;
  align-items: center;
  gap: 8px;
}

.breadcrumbs a {
  color: #0066cc;
  text-decoration: none;
  transition: color 0.2s;
}

.breadcrumbs a:hover {
  color: #0088ff;
  text-decoration: underline;
}

.breadcrumbs .separator {
  color: #cbd5e1;
  user-select: none;
}

.breadcrumbs .current {
  color: #1e293b;
  font-weight: 500;
}

/* Responsive móvil */
@media (max-width: 640px) {
  .breadcrumbs {
    font-size: 13px;
  }
}

2. HTML (Copiar donde quieras breadcrumbs)

<!-- BREADCRUMBS COMPLETO: HTML Semántico + Schema -->
<div class="breadcrumbs">
  <nav aria-label="Breadcrumb">
    <ol itemscope itemtype="https://schema.org/BreadcrumbList">
      
      <!-- Nivel 1: Home -->
      <li itemprop="itemListElement" itemscope 
          itemtype="https://schema.org/ListItem">
        
        
        <meta itemprop="position" content="2" />
        <span class="separator" aria-hidden="true">›</span>
      </li>
      
      <!-- Nivel 3: Página Actual (sin link) -->
      <li itemprop="itemListElement" itemscope 
          itemtype="https://schema.org/ListItem">
        <span itemprop="name" class="current">Templates Descargables</span>
        <meta itemprop="position" content="3" />
      </li>
      
    </ol>
  </nav>
</div>

📝 Implementación WordPress:

Opción A: Con Rank Math (automático)

  1. Rank Math ya genera breadcrumbs automáticos
  2. Activar: Rank Math → General Settings → Breadcrumbs → Enable
  3. Agregar en theme (header.php antes del H1):
    <?php rank_math_the_breadcrumbs(); ?>

Opción B: Manual (código arriba)

  1. Copiar CSS al archivo style.css de tu theme
  2. Copiar HTML donde quieras mostrar (típicamente antes del H1)
  3. Actualizar URLs y nombres según tu estructura
  4. Para hacer dinámico, usar PHP de WordPress

Opción C: Plugin simple

  1. Instalar “Breadcrumb NavXT”
  2. Configurar en Settings → Breadcrumb NavXT
  3. Agregar shortcode: [bcn_display]

⚠️ Validación importante:

🔒 Security Headers (Apache + Nginx)

7 headers de seguridad esenciales. Mejora score SecurityHeaders.com y protege tu sitio.

Para Apache (.htaccess)

# ============================================
# SECURITY HEADERS - APACHE (.htaccess)
# Ubicación: Raíz del sitio (/.htaccess)
# ============================================

<IfModule mod_headers.c>

  # HSTS (HTTP Strict Transport Security)
  # Fuerza HTTPS por 1 año
  # ⚠️ Solo activar después de confirmar HTTPS funciona 100%
  Header always set Strict-Transport-Security \
    "max-age=31536000; includeSubDomains; preload" env=HTTPS
  
  # X-Content-Type-Options
  # Previene MIME type sniffing
  Header always set X-Content-Type-Options "nosniff"
  
  # X-Frame-Options
  # Protege contra clickjacking
  Header always set X-Frame-Options "SAMEORIGIN"
  
  # X-XSS-Protection
  # Activa protección XSS del navegador
  Header always set X-XSS-Protection "1; mode=block"
  
  # Referrer-Policy
  # Controla información enviada en header Referer
  Header always set Referrer-Policy \
    "strict-origin-when-cross-origin"
  
  # Permissions-Policy
  # Controla features del navegador
  Header always set Permissions-Policy \
    "geolocation=(self), microphone=(), camera=()"
  
  # Content-Security-Policy (CSP)
  # ⚠️ Ajustar según tus necesidades
  Header always set Content-Security-Policy \
    "default-src 'self' https:; \
     script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; \
     style-src 'self' 'unsafe-inline' https:; \
     img-src 'self' data: https:; \
     font-src 'self' data: https:; \
     frame-src 'self' https:;"

</IfModule>

# ============================================
# CONFIGURACIÓN ADICIONAL SEGURIDAD
# ============================================

# Deshabilitar listado de directorios
Options -Indexes

# Proteger archivos sensibles
<FilesMatch "(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$">
  # Apache 2.4
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
  
  # Apache 2.2
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
</FilesMatch>

Para Nginx

# ============================================
# SECURITY HEADERS - NGINX
# Ubicación: /etc/nginx/sites-available/tudominio
# ============================================

# Agregar dentro del bloque server { }

add_header Strict-Transport-Security \
  "max-age=31536000; includeSubDomains; preload" always;

add_header X-Content-Type-Options \
  "nosniff" always;

add_header X-Frame-Options \
  "SAMEORIGIN" always;

add_header X-XSS-Protection \
  "1; mode=block" always;

add_header Referrer-Policy \
  "strict-origin-when-cross-origin" always;

add_header Permissions-Policy \
  "geolocation=(self), microphone=(), camera=()" always;

add_header Content-Security-Policy \
  "default-src 'self' https:; \
   script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; \
   style-src 'self' 'unsafe-inline' https:; \
   img-src 'self' data: https:; \
   font-src 'self' data: https:; \
   frame-src 'self' https:;" always;

# Después de hacer cambios:
# sudo nginx -t
# sudo systemctl reload nginx

📝 Pasos de implementación:

  1. Backup: Hacer copia de .htaccess actual
  2. Agregar headers: Copiar código al final de .htaccess
  3. Validar: Ir a securityheaders.com
  4. Score objetivo: A o A+
  5. Ajustar CSP: Si algo se rompe, revisar Content-Security-Policy

⚠️ Problemas comunes:

  • Error 500: Comentar línea por línea para identificar cuál causa problema
  • CSP rompe JavaScript: Agregar dominio específico a script-src
  • YouTube no carga: Agregar https://www.youtube.com a frame-src
  • Google Analytics: Agregar https://www.google-analytics.com a script-src

🔍 Validar implementación:

Después de agregar los headers, verifica en:

  • SecurityHeaders.com: https://securityheaders.com (score A o A+)
  • Browser DevTools: F12 → Network → Seleccionar página → Headers
  • Console (F12): Verificar que no haya errores CSP

¿Necesitas Ayuda con la Implementación?

Te ayudamos a configurar tu sitio completo para máxima seguridad y visibilidad IA

💬 Agendar Consultoría 🛠️ Más Herramientas

✉️ info@aiseo.com.mx | 📱 +52 55 1860 7503