Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineInfrastruttura

Redirect 301 e gestione 404 in WordPress: non perdere traffico per link rotti

03 Nov 2026 — 12:45 8 min di lettura
Redirect 301 e gestione 404 in WordPress: non perdere traffico per link rotti

Ogni 404 è un visitatore che se ne va e un segnale SEO negativo. Come gestire i redirect 301 a livello di server (non con plugin), monitorare i 404 da Search Console, e perché i redirect concatenati sono peggio del 404 stesso.

Un 404 non è solo una pagina che non esiste — è un visitatore che se ne va, un link di valore che perde peso SEO, e un segnale che Google registra. Quando rifai un sito, cambi la struttura degli URL, elimini vecchie pagine o migri da una piattaforma all'altra, i 404 sono inevitabili. Quello che non è inevitabile è lasciarli lì. Ogni URL con traffico che restituisce 404 è una perdita misurabile di visite e posizionamento.

L'errore più comune che vediamo è gestire i redirect con un plugin. Non che i plugin di redirect non funzionino — funzionano. Ma aggiungono un layer PHP a ogni richiesta 404: WordPress si avvia, elabora la richiesta, scopre che la pagina non esiste, cerca il redirect nel database, e solo allora reindirizza. Su un sito con mille 404 al giorno (succede più spesso di quanto pensi, per bot e link vecchi), è un carico inutile sul server. I redirect vanno gestiti a livello di web server, prima che WordPress venga coinvolto.

Redirect 301 a livello di .htaccess (Apache)

Il redirect più efficiente è quello che il web server gestisce prima ancora di passare la richiesta a PHP. Su Apache, si fa con RedirectMatch o Redirect nel file .htaccess. La regola: redirect semplici con Redirect, redirect con pattern con RedirectMatch:

.htaccess
# Redirect 301 di singole pagine (vecchio URL → nuovo URL)
Redirect 301 /vecchia-pagina https://www.example.com/nuova-pagina
Redirect 301 /servizi-vecchi https://www.example.com/servizi
Redirect 301 /chi-siamo-2018 https://www.example.com/chi-siamo

# Redirect con pattern: intera directory → nuova destinazione
RedirectMatch 301 ^/blog/2018/(.*)$ https://www.example.com/blog/$1
RedirectMatch 301 ^/category/(.*)$ https://www.example.com/argomenti/$1

# Redirect da vecchio dominio a nuovo dominio (migrazone completa)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^vecchio-dominio\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.vecchio-dominio\.com$
RewriteRule ^(.*)$ https://www.nuovo-dominio.com/$1 [R=301,L]
Nota: I redirect 301 vanno messi prima delle regole di WordPress in .htaccess. L'ordine conta: Apache elabora le regole dall'alto verso il basso. Usa sempre 301 (permanente) e mai 302 (temporaneo) per i redirect SEO — il 302 non trasferisce il link juice.

Redirect a livello di Nginx (se non sei su Apache)

Se il tuo hosting usa Nginx (sempre più hosting cloud lo fanno), .htaccess non esiste. I redirect vanno nel file di configurazione del server block. La sintassi è diversa ma il concetto è lo stesso:

Terminale
# Nginx: redirect singola pagina
location = /vecchia-pagina {
    return 301 https://www.example.com/nuova-pagina;
}

# Nginx: redirect con pattern (directory intera)
location ~ ^/blog/2018/(.*)$ {
    return 301 https://www.example.com/blog/$1;
}

# Nginx: redirect da vecchio dominio
server {
    listen 80;
    server_name vecchio-dominio.com www.vecchio-dominio.com;
    return 301 https://www.nuovo-dominio.com$request_uri;
}
Nota: Su Nginx non puoi modificare la configurazione se sei su hosting condiviso. In quel caso, chiedi al provider o usa un plugin di redirect come ultima spiaggia. Se hai accesso SSH e il tuo hosting è gestito, la configurazione Nginx è la via più performante.

Monitorare i 404 da Search Console

Google Search Console è la fonte più autorevole per i 404 che contano davvero — quelli che Google ha trovato e che avevano traffico o link. Nel pannello Copertura, filtra per 'Escluse' e cerca '404 non trovato'. Ogni URL in quella lista è un candidato per un redirect:

Terminale
# Verifica che un redirect funzioni correttamente
curl -I -L https://www.example.com/vecchia-pagina

# Output atteso:
# HTTP/2 301
# location: https://www.example.com/nuova-pagina
# HTTP/2 200

# Verifica che non ci siano redirect concatenati (chain)
curl -o /dev/null -s -w 'Redirect count: %{num_redirects}\nFinal: %{url_effective}\n' \
  -L https://www.example.com/vecchia-pagina

# Se num_redirects > 1, hai una catena: A → B → C invece di A → C
Nota: I redirect concatenati (A → B → C) sono peggio di un redirect diretto (A → C) perché ogni hop aggiunge latenza e diluisce il link juice. Se hai cambiato URL due volte, aggiorna il primo redirect per puntare direttamente alla destinazione finale. Google segue fino a 5 redirect, ma oltre perde pazienza.

La pagina 404 personalizzata (l'ultima spiaggia)

Non tutti i 404 possono essere reindiritti — alcuni URL non hanno una destinazione naturale. Per quelli, la pagina 404 personalizzata è l'ultima possibilità di trattenere il visitatore. Una buona pagina 404 non dice solo 'pagina non trovata': offre ricerca, link alle sezioni principali, e articoli correlati. WordPress usa il file 404.php del tema:

wp-config.php
<?php
// 404.php nel tema child
get_header(); ?>

<div class="error-404">
    <h1>Questa pagina non esiste (più)</h1>
    <p>L'URL che cercavi potrebbe essere stato spostato o eliminato.</p>

    <!-- Form di ricerca -->
    <?php get_search_form(); ?>

    <!-- Link alle sezioni principali -->
    <nav class="error-404-nav">
        <a href="/servizi">I nostri servizi</a>
        <a href="/blog">Il magazine</a>
        <a href="/contatti">Contattaci</a>
    </nav>

    <!-- Articoli recenti come suggerimento -->
    <h2>Articoli recenti</h2>
    <?php
    $recent = new WP_Query( array(
        'post_type'      => 'post',
        'posts_per_page' => 3,
        'post_status'    => 'publish',
    ) );
    if ( $recent->have_posts() ) :
        while ( $recent->have_posts() ) : $recent->the_post(); ?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        <?php endwhile;
    endif;
    wp_reset_postdata();
    ?>
</div>

<?php get_footer(); ?>
Nota: La pagina 404 deve restituire l'header HTTP 404 (non 200). Se restituisce 200, Google indicizza la pagina 404 come contenuto valido, il che è peggio del 404 stesso. WordPress gestisce questo automaticamente nel template 404.php, ma se usi un page builder verifica con curl -I che l'header sia corretto.

I redirect e i 404 sono manutenzione, non glamour. Ma sono il tipo di manutenzione che fa la differenza tra un sito che mantiene il posizionamento e uno che lo perde silenziosamente. Ogni 404 con traffico è un piccolo salasso SEO — da solo non uccide, ma cento insieme sì. L'audit dei 404 va fatto ogni trimestre, non una volta sola e mai più.

Check-up WordPress

Verifica lo stato del tuo WordPress con un check-up gratuito.

Analisi di sicurezza, prestazioni e configurazione tecnica senza impegno commerciale.

Check-up WordPress
Condividi