Reindirizza i vecchi URL del forum ai nuovi URL di Discourse utilizzando i permalink

:bookmark: Questo riferimento spiega come i permalink di Discourse reindirizzino i vecchi percorsi URL verso nuove destinazioni, come funzionano le normalizzazioni dei permalink e come testare e risolvere i problemi di reindirizzamento dopo una migrazione o una modifica della struttura degli URL.

:person_raising_hand: Livello utente richiesto: Amministratore

:computer: L’accesso alla console è richiesto solo quando si creano permalink da un importer, uno script o la console Rails

Quando si migra da un altro forum o si modifica la struttura degli URL del sito, i vecchi link provenienti da motori di ricerca, segnalibri, email o altri siti web potrebbero non puntare più alla pagina corretta.

I permalink consentono di reindirizzare i vecchi percorsi URL verso le nuove destinazioni utilizzando reindirizzamenti 301 Moved Permanently.

I permalink sono mappature esatte dei percorsi. Ad esempio, se questo vecchio URL non funziona più:

https://discourse.example.com/forum/topic/123

puoi creare un permalink in modo che reindirizzi al nuovo argomento:

https://discourse.example.com/t/welcome-to-our-community/456

Cosa sono i permalink

Un permalink è una mappatura esatta da un vecchio percorso URL a una nuova destinazione.

Ad esempio:

forum/topic/123 → /t/welcome-to-our-community/456

I permalink sono utili quando:

  • hai migrato da un’altra piattaforma di forum
  • i vecchi link sono indicizzati dai motori di ricerca
  • i vecchi link vengono utilizzati in email, documentazione o altri siti web
  • hai modificato la struttura degli URL del tuo sito
  • desideri che un vecchio percorso reindirizzi a un argomento, un post, una categoria, un tag, un utente o un URL esterno

Ogni URL del permalink mappa una sola destinazione.

I permalink sono corrispondenze esatte. Il campo dell’URL del permalink non supporta caratteri jolly o espressioni regolari. Se molti vecchi URL seguono un modello prevedibile, utilizza le normalizzazioni dei permalink per trasformare gli URL in arrivo prima della ricerca del permalink esatto.

Permalink e normalizzazioni

I permalink e le normalizzazioni svolgono funzioni diverse:

Funzionalità Cosa fa Esempio
Permalink Reindirizza un vecchio percorso salvato a una destinazione vecchio/topic/123 → Argomento 456
Normalizzazione Modifica il percorso in arrivo prima della ricerca del permalink vecchio/topic/123-titolo → vecchio/topic/123

Una normalizzazione non reindirizza di per sé. Modifica solo il percorso utilizzato per cercare un permalink salvato.

È comunque necessario disporre di un permalink corrispondente dopo che la normalizzazione è stata applicata.

Esempi rapidi

Reindirizza un vecchio URL di un argomento

URL vecchio:

https://discourse.example.com/forum/topic/123

URL del permalink:

forum/topic/123

Tipo di destinazione:

Argomento

Destinazione:

456

Risultato:

/forum/topic/123 → /t/welcome-to-our-community/456

Reindirizza un vecchio URL con una stringa di query

URL vecchio:

https://discourse.example.com/viewtopic.php?t=123

URL del permalink:

viewtopic.php?t=123

Tipo di destinazione:

Argomento

Destinazione:

456

Risultato:

/viewtopic.php?t=123 → /t/welcome-to-our-community/456

Reindirizza molti vecchi URL con lo stesso modello

URL vecchi:

/forum/support/123-how-do-i-reset-my-password.html
/forum/general/456-how-do-i-change-my-email.html

Puoi utilizzare una normalizzazione per semplificarli prima della ricerca:

/forum/support/123-how-do-i-reset-my-password.html → forum/123
/forum/general/456-how-do-i-change-my-email.html → forum/456

Quindi crea permalink esatti:

forum/123 → Argomento 1001
forum/456 → Argomento 1002

Cosa inserire come URL del permalink

Inserisci il vecchio percorso, non l’URL completo.

Ad esempio, usa:

forum/topic/123

oppure:

/forum/topic/123

Non utilizzare l’URL vecchio completo:

https://discourse.example.com/forum/topic/123

Le barre iniziali sono accettate, ma vengono rimosse quando il permalink viene salvato. Queste due voci sono equivalenti:

/forum/topic/123
forum/topic/123

Entrambe vengono memorizzate come:

forum/topic/123

Gli spazi iniziali e finali vengono rimossi quando il permalink viene salvato.

Le stringhe di query fanno parte della corrispondenza

I permalink corrispondono all’intero percorso della richiesta, inclusa la stringa di query.

Questo significa che questi due URL sono corrispondenze di permalink diverse:

/vecchio/topic/123
/vecchio/topic/123?utm_source=esempio

Se il vecchio URL ha una stringa di query, devi:

  1. creare un permalink che includa la stringa di query, oppure
  2. utilizzare una normalizzazione del permalink per rimuovere o semplificare la stringa di query prima della corrispondenza

Per la maggior parte dei parametri di analisi o tracciamento, l’utilizzo di una normalizzazione è solitamente migliore rispetto alla creazione di molti permalink separati.

Ad esempio, questo permalink salvato:

docs/123

non corrisponde necessariamente a questo URL richiesto:

/docs/123?utm_source=newsletter

a meno che una normalizzazione non rimuova la stringa di query prima della ricerca.

Quando copi vecchi URL dagli strumenti di analisi, dai rapporti della console di ricerca, dai browser o dalle campagne email, verifica se sono stati aggiunti parametri di tracciamento.

I frammenti URL non fanno parte della corrispondenza

I frammenti URL non vengono inviati al server.

Ad esempio, questo URL:

/vecchio/topic#post-12

arriva al server come:

/vecchio/topic

Un permalink o una normalizzazione non può corrispondere a:

#post-12

a meno che il carattere # non sia codificato nella richiesta effettiva come %23.

Destinazioni dei permalink supportate

Un permalink può reindirizzare a uno di questi tipi di destinazione:

  • Argomento
  • Post
  • Categoria
  • Tag
  • Utente
  • URL esterno o relativo

Le destinazioni URL esterne o relative possono essere utilizzate per reindirizzamenti come:

vecchio/privacy-policy → https://archive.discourse.example.com/privacy

oppure:

vecchio/preferenze → /miei/preferenze

Utilizza le destinazioni URL esterne con cautela. Reindirizzano i visitatori fuori dal tuo sito e non verificano se l’URL di destinazione esiste.

Preferisci i tipi di destinazione interni quando reindirizzi ad argomenti, post, categorie, tag o utenti migrati. Utilizza una destinazione URL esterna quando la pagina di destinazione non è rappresentata da un oggetto interno.

Aggiungi un permalink manualmente

Per aggiungere un permalink manualmente:

  1. Vai a /admin/config/permalinks.
  2. Seleziona la scheda Permalink.
  3. Clicca su Aggiungi permalink.
  4. Inserisci il vecchio percorso nel campo URL.
  5. Seleziona il Tipo di permalink.
  6. Inserisci o seleziona la destinazione.
  7. Salva il permalink.
  8. Testa il vecchio URL in un browser o con curl.

Esempio:

URL:
forum/topic/123

Tipo di permalink:
Argomento

Destinazione:
456

Una richiesta a:

https://discourse.example.com/forum/topic/123

reindirizzerà all’argomento 456.

Valori di destinazione

Il valore di destinazione dipende dal tipo di permalink.

Tipo di permalink Destinazione
Argomento Un argomento
Post Un post
Categoria Una categoria
Tag Un tag
Utente Un utente
URL esterno o relativo Un URL esterno completo o un percorso relativo

Esempi:

forum/topic/123 → Argomento 456
forum/post/789 → Post 789
forum/category/support → Categoria supporto
forum/tag/example → Tag example
forum/user/alice → Utente alice
vecchio/privacy → https://archive.discourse.example.com/privacy
vecchio/preferenze → /miei/preferenze

Creazione di permalink durante una migrazione

Molti importer ufficiali creano automaticamente i permalink per le categorie, gli argomenti, i post o gli utenti migrati.

Per le migrazioni di grandi dimensioni, i permalink vengono solitamente creati dall’importer o da uno script di migrazione anziché inseriti manualmente uno alla volta.

Se stai scrivendo un importer personalizzato, crea record di permalink per i vecchi URL che devono continuare a funzionare dopo la migrazione.

Ad esempio:

Permalink.create!(url: "discussion/12345", topic_id: 987)

In questo esempio, discussion/12345 è il vecchio percorso e 987 è l’ID dell’argomento Discourse.

È accettata anche una barra iniziale:

Permalink.create!(url: "/discussion/12345", topic_id: 987)

Entrambi gli esempi memorizzano l’URL del permalink come:

discussion/12345

Per reindirizzare a un URL esterno:

Permalink.create!(
  url: "discussion/12345",
  external_url: "https://archive.discourse.example.com/discussion/12345"
)

Quando crei permalink in un importer:

  • memorizza il vecchio percorso, non il vecchio dominio completo
  • includi la stringa di query solo se è necessaria per la corrispondenza
  • assicurati che ogni vecchio percorso mappi una sola destinazione
  • verifica la presenza di duplicati prima di inserire i record
  • ricorda che gli URL dei permalink devono essere unici

Se esegui più migrazioni di test, gli ID finali degli argomenti e dei post potrebbero cambiare tra un’esecuzione e l’altra. Genera o verifica le tue mappature dei permalink finali quando i dati di migrazione in produzione sono stabili.

Cosa sono le normalizzazioni dei permalink

Una normalizzazione del permalink modifica un vecchio percorso in arrivo prima di cercare un permalink corrispondente.

Le normalizzazioni sono utili quando molti vecchi URL seguono lo stesso modello prevedibile.

Ad esempio, supponi che il tuo vecchio forum utilizzasse URL come questo:

/forum/support/123-how-do-i-reset-my-password.html

ma il tuo permalink salvato è più semplice:

forum/123

Una normalizzazione può trasformare la richiesta in arrivo nel percorso del permalink salvato:

/forum/support/123-how-do-i-reset-my-password.html
        ↓
forum/123

Quindi il permalink può reindirizzare:

forum/123 → /t/how-do-i-reset-my-password/456

Una normalizzazione non reindirizza di per sé. Modifica solo il percorso utilizzato per la ricerca del permalink.

È comunque necessario disporre di un permalink corrispondente per il percorso normalizzato.

La maggior parte dei siti non ha bisogno di normalizzazioni dei permalink. Utilizzale solo quando molti vecchi URL seguono un modello prevedibile e la creazione di un permalink per ogni vecchio URL sarebbe impraticabile.

Come funzionano insieme i permalink e le normalizzazioni

Quando viene richiesta un vecchio URL, il processo è:

Il visitatore richiede il vecchio URL
        ↓
Vengono applicate le normalizzazioni dei permalink, se configurate
        ↓
Viene eseguita una ricerca del permalink utilizzando il percorso risultante
        ↓
Se esiste un permalink corrispondente, il visitatore viene reindirizzato

Ad esempio:

URL richiesto:
/vecchio/topic/123?utm_source=newsletter

La normalizzazione lo cambia in:
vecchio/topic/123

Il permalink lo reindirizza a:
/t/titolo-nuovo-argomento/456

Aggiungi una normalizzazione del permalink

Le normalizzazioni dei permalink sono configurate dalle impostazioni dei permalink.

Per aggiungerne una:

  1. Vai a /admin/config/permalinks.
  2. Seleziona la scheda Impostazioni.
  3. Aggiungi una regola all’impostazione permalink normalizations.
  4. Salva l’impostazione.
  5. Testa un vecchio URL che dovrebbe essere normalizzato.
  6. Conferma che il percorso normalizzato corrisponda a un permalink esistente.

La sintassi è:

/<regex>/<replacement>

Più regole sono separate da |.

Ad esempio:

/old\/topic\/(\d+).*/topic/\1

Questo può trasformare:

vecchio/topic/123-mio-vecchio-titolo

in:

topic/123

La sostituzione utilizza la sintassi di sostituzione Ruby, quindi i gruppi di cattura sono scritti come:

\1
\2
\3

Regole importanti per le normalizzazioni

Mantieni semplici le regole di normalizzazione.

  • Le normalizzazioni utilizzano espressioni regolari Ruby.
  • I caratteri / letterali nella parte regex devono essere escapati come \/.
  • I caratteri / letterali nella parte di sostituzione non devono essere escapati.
  • Più regole di normalizzazione sono separate da |.
  • Poiché | separa le regole, evita di utilizzare l’alternanza regex con |.
  • Ogni regola utilizza una singola sostituzione, non una sostituzione globale.
  • Le regole vengono applicate in ordine.
  • Le regole corrispondenti vengono applicate in sequenza.
  • Le normalizzazioni vengono applicate prima della ricerca del permalink.
  • Le normalizzazioni vengono applicate anche quando si salvano i record dei permalink.
  • Il validatore delle impostazioni rileva le espressioni regolari non valide, ma potrebbe non rilevare ogni regola che si comporta in modo diverso da quanto previsto.

:warning: Attenzione: Le normalizzazioni vengono applicate quando i record dei permalink vengono salvati. Se inserisci un URL non normalizzato nell’interfaccia di amministrazione, potrebbe essere memorizzato come risultato normalizzato. Se aggiungi o modifichi le normalizzazioni dopo aver creato i permalink, testa attentamente e verifica come vengono memorizzati i nuovi URL dei permalink salvati.

Esempi di normalizzazione

Reindirizza un vecchio URL con testo del titolo aggiuntivo

URL vecchi:

/forum/support/123-how-do-i-reset-my-password.html
/forum/general/456-how-do-i-change-my-email.html

Puoi normalizzarli in percorsi di permalink più semplici:

forum/123
forum/456

Esempio di normalizzazione:

/forum\/[^\/]+\/(\d+).*/forum/\1

Quindi crea i permalink:

forum/123 → Argomento 1001
forum/456 → Argomento 1002

Ignora le stringhe di query di tracciamento

URL vecchio richiesto:

/docs/123?utm_source=newsletter

Permalink salvato:

docs/123

Normalizzazione:

/(docs\/\d+)\?.*/\1

Questo rimuove la stringa di query prima della ricerca del permalink.

Preserva un parametro di query importante

Alcuni vecchi forum utilizzano i parametri di query come identificatore stabile dell’argomento.

Ad esempio:

viewtopic.php?f=10&t=123
viewtopic.php?t=123

Potresti voler normalizzare questi URL in:

viewtopic.php?t=123

Esempio di normalizzazione:

/(viewtopic\.php\?)(?:.*&)?(t=\d+).*/\1\2

Quindi crea un permalink:

viewtopic.php?t=123 → Argomento 456

Reindirizzamenti Regex e wildcard

Il campo dell’URL del permalink non supporta regex o wildcard.

Questo non funzionerà come URL del permalink:

forum/topic/*

Questo non funzionerà nemmeno come URL del permalink:

forum/topic/(\d+)

Se hai bisogno di una gestione basata su modelli, utilizza una normalizzazione del permalink per riscrivere l’URL in arrivo in una forma che possa corrispondere a un permalink salvato esatto.

Ad esempio:

/forum/topic/123-titolo → forum/topic/123

Quindi crea un permalink esatto normale:

forum/topic/123 → Argomento 456

Precedenza dei route e percorsi integrati

Il routing dei permalink viene verificato dopo i route delle applicazioni normali.

Questo significa che un route esistente valido potrebbe essere risolto normalmente prima che venga verificato un permalink.

Fai attenzione con i vecchi URL che iniziano con percorsi integrati come:

/t
/c
/u
/tag
/tags

Ad esempio, un vecchio URL di forum come questo potrebbe sembrare un route di categoria integrato:

/c/blog/vecchio-url-piattaforma/ba-p/12345

Se un vecchio URL entra in conflitto con un route esistente valido, il route valido può avere la precedenza sul permalink.

Allo stesso modo, se crei un permalink per un percorso che sembra un route di argomento esistente, come:

t/123

il route normale dell’argomento potrebbe essere gestito prima della ricerca del permalink.

Alcuni route integrati “non trovato” hanno un comportamento di fallback aggiuntivo, ma non dovresti farvi affidamento. Testa sempre i vecchi URL che si sovrappongono ai percorsi integrati.

Se hai bisogno che un vecchio URL di un argomento reindirizzi da qualche altra parte, il vecchio argomento generalmente non deve continuare a risolversi come un route di argomento valido.

Permessi e contenuti privati

I permalink verso destinazioni interne rispettano i normali permessi.

Se un permalink punta a un argomento, post, categoria, tag o utente privato o limitato, i visitatori che non possono accedere a quella destinazione riceveranno un 404 invece di un reindirizzamento.

I permalink verso URL esterni non verificano i permessi dei contenuti interni.

Caratteri speciali e URL codificati

Testa attentamente gli URL con caratteri speciali.

Questo include URL con:

  • spazi
  • +
  • %
  • &
  • '
  • :
  • parentesi
  • caratteri non latini

La corrispondenza dei permalink utilizza il percorso della richiesta codificato dopo aver rimosso la barra iniziale e aver applicato le normalizzazioni configurate. Le differenze di codifica possono impedire a un URL di corrispondere al permalink previsto.

Ad esempio, questi potrebbero non essere equivalenti a seconda di come il vecchio URL viene richiesto e memorizzato:

vecchio/topic/hello%20world
vecchio/topic/hello+world

Utilizza %20 per gli spazi negli esempi di URL. In un percorso URL, + non è uguale a uno spazio.

Caratteri come &, ? e # hanno un significato speciale negli URL. Se sono intesi come caratteri di percorso letterali, devono essere codificati in percentuale.

In caso di dubbi, testa l’esatto vecchio URL che gli utenti o i motori di ricerca richiederanno.

Limitazioni

I permalink sono progettati per reindirizzare vecchi percorsi verso nuove destinazioni. Non sono un motore di reindirizzamento o riscrittura a uso generale.

Limitazioni importanti:

  • Gli URL dei permalink sono memorizzati come percorsi e stringhe di query, non come URL completi.
  • Gli URL completi non vengono convertiti automaticamente in percorsi.
  • Gli URL dei permalink devono essere unici dopo la normalizzazione.
  • Un URL del permalink può avere una sola destinazione.
  • Le destinazioni supportate sono limitate ad argomenti, post, categorie, tag, utenti e URL esterni o relativi.
  • I permalink utilizzano 301 Moved Permanently; non esiste un’opzione per 302 per singolo permalink.
  • Il campo dell’URL del permalink non supporta caratteri jolly o espressioni regolari.
  • Le stringhe di query fanno parte della chiave di ricerca.
  • I frammenti URL, come #post-12, non vengono inviati al server e non possono essere corrispondenti.
  • La corrispondenza non utilizza lo schema o l’host della richiesta.
  • I route nativi vengono verificati prima del route catch-all dei permalink.
  • Le destinazioni interne sono verificate per i permessi.
  • Le destinazioni URL esterne bypassano i controlli dei permessi dei contenuti interni.
  • Le normalizzazioni dei permalink utilizzano espressioni regolari Ruby.
  • Le regole di normalizzazione sono separate da |, quindi evita di utilizzare | come alternanza regex.
  • Le regole di normalizzazione utilizzano una singola sostituzione per regola, non una sostituzione globale.
  • Le normalizzazioni vengono applicate sia prima della ricerca che prima del salvataggio dei record dei permalink.
  • Il validatore delle impostazioni rileva le espressioni regolari non valide, ma potrebbe non rilevare ogni regola che si comporta in modo diverso da quanto previsto.

Per la maggior parte dei siti, i semplici permalink uno-a-uno sono più facili da mantenere rispetto alle complesse regole di normalizzazione. Utilizza le normalizzazioni solo quando i vecchi URL seguono un modello prevedibile.

Evita di reindirizzare ogni vecchio URL alla homepage

Non reindirizzare tutti i vecchi URL alla tua homepage.

Reindirizza ogni vecchio URL alla nuova pagina più pertinente. Se non esiste un contenuto equivalente, un 404 potrebbe essere meglio che inviare utenti e motori di ricerca a una pagina non correlata.

I buoni reindirizzamenti sono specifici:

vecchio/topic/123 → nuovo argomento sullo stesso argomento

I reindirizzamenti scadenti sono generici:

vecchio/topic/123 → homepage
vecchio/topic/456 → homepage
vecchio/topic/789 → homepage

Testa i tuoi reindirizzamenti

Dopo aver creato permalink o normalizzazioni, testa un campione di vecchi URL.

Puoi testare in un browser, oppure utilizzare:

curl -I https://discourse.example.com/forum/topic/123

Un reindirizzamento del permalink funzionante dovrebbe restituire un reindirizzamento permanente simile a:

HTTP/2 301
location: https://discourse.example.com/t/welcome-to-our-community/456

Testa gli esempi da ogni modello di vecchio URL, inclusi:

  • vecchi URL degli argomenti
  • vecchi URL delle categorie
  • vecchi URL dei post
  • URL con stringhe di query
  • URL con caratteri speciali
  • URL dai risultati di ricerca
  • URL da vecchie email o documentazione
  • URL che iniziano con percorsi integrati come /t, /c o /u
  • reindirizzamenti URL esterni

Risoluzione dei problemi

Se un vecchio URL non viene reindirizzato, verifica queste cause comuni:

  1. Conferma che il permalink esista.
  2. Conferma che l’URL del permalink sia il vecchio percorso, non il vecchio dominio completo.
  3. Verifica se il vecchio URL include una stringa di query.
  4. Se utilizzi una normalizzazione, conferma che il percorso normalizzato corrisponda a un permalink salvato.
  5. Verifica se un route integrato ha la precedenza.
  6. Verifica se la destinazione è privata o limitata.
  7. Verifica le differenze di codifica, come %20 vs +.
  8. Verifica se una normalizzazione ha modificato l’URL quando il permalink è stato salvato.
  9. Conferma che il contenuto sia stato migrato.
  10. Testa con l’esatto vecchio URL da un browser o con curl -I.

I problemi più comuni sono:

  • inserimento dell’URL vecchio completo invece del vecchio percorso
  • stringhe di query mancanti o impreviste
  • aspettarsi che i caratteri jolly o le regex funzionino nel campo dell’URL del permalink
  • vecchi URL che si sovrappongono ai percorsi integrati
  • destinazioni private o limitate
  • differenze di codifica
  • normalizzazioni che modificano il percorso in modo imprevisto

Note SEO

Dopo una migrazione, i motori di ricerca potrebbero segnalare i vecchi URL come reindirizzati. Questo è previsto se quei vecchi URL ora reindirizzano alle nuove pagine corrette.

Per ottenere i migliori risultati:

  • reindirizza i vecchi URL alle nuove pagine pertinenti
  • evita catene di reindirizzamento non necessarie
  • evita di reindirizzare molti URL non correlati alla homepage
  • mantieni i reindirizzamenti attivi abbastanza a lungo affinché utenti e motori di ricerca possano aggiornarsi
  • testa gli URL importanti dai dati della tua vecchia sitemap, analytics o console di ricerca
37 Mi Piace