Redirigir las URLs antiguas del foro a las nuevas URLs de Discourse usando enlaces permanentes

:bookmark: Esta referencia explica cómo los enlaces permanentes (permalinks) de Discourse redirigen las rutas de URL antiguas a nuevos destinos, cómo funcionan las normalizaciones de enlaces permanentes y cómo probar y solucionar problemas de redirecciones después de una migración o un cambio en la estructura de URL.

:person_raising_hand: Nivel de usuario requerido: Administrador

:computer: Acceso a la consola solo necesario al crear enlaces permanentes desde un importador, script o consola de Rails

Cuando migra desde otro foro o cambia la estructura de URL de su sitio, los enlaces antiguos de motores de búsqueda, marcadores, correos electrónicos u otros sitios web pueden dejar de apuntar a la página correcta.

Los enlaces permanentes le permiten redirigir las rutas de URL antiguas a sus nuevos destinos mediante redirecciones 301 Moved Permanently (Movido Permanentemente).

Los enlaces permanentes son asignaciones exactas de rutas. Por ejemplo, si esta URL antigua ya no funciona:

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

puede crear un enlace permanente para que se redirija al nuevo tema:

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

Qué son los enlaces permanentes

Un enlace permanente es una asignación exacta de una ruta de URL antigua a un único destino nuevo.

Por ejemplo:

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

Los enlaces permanentes son útiles cuando:

  • ha migrado desde otra plataforma de foros
  • los enlaces antiguos están indexados por motores de búsqueda
  • los enlaces antiguos se utilizan en correos electrónicos, documentación u otros sitios web
  • ha cambiado la estructura de las URL de su sitio
  • desea que una ruta antigua se redirija a un tema, publicación, categoría, etiqueta, usuario o URL externa

Cada URL de enlace permanente se asigna a un único destino.

Los enlaces permanentes son coincidencias exactas. El campo de URL del enlace permanente no admite comodines ni expresiones regulares. Si muchas URL antiguas siguen un patrón predecible, utilice normalizaciones de enlaces permanentes para transformar las URL entrantes antes de la búsqueda exacta del enlace permanente.

Enlaces permanentes y normalizaciones

Los enlaces permanentes y las normalizaciones hacen cosas diferentes:

Característica Qué hace Ejemplo
Enlace permanente Redirige una ruta antigua guardada a un destino old/topic/123 → Tema 456
Normalización Cambia la ruta entrante antes de la búsqueda del enlace permanente old/topic/123-title → old/topic/123

Una normalización no realiza una redirección por sí misma. Solo cambia la ruta que se utiliza para buscar un enlace permanente guardado.

Aún necesita un enlace permanente coincidente después de aplicar la normalización.

Ejemplos rápidos

Redirigir una URL de tema antigua

URL antigua:

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

URL del enlace permanente:

forum/topic/123

Tipo de destino:

Tema

Destino:

456

Resultado:

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

Redirigir una URL antigua con una cadena de consulta

URL antigua:

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

URL del enlace permanente:

viewtopic.php?t=123

Tipo de destino:

Tema

Destino:

456

Resultado:

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

Redirigir muchas URL antiguas con el mismo patrón

URL antiguas:

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

Puede utilizar una normalización para simplificarlas antes de la búsqueda:

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

Luego, cree enlaces permanentes exactos:

forum/123 → Tema 1001
forum/456 → Tema 1002

Qué ingresar como URL del enlace permanente

Ingrese la ruta antigua, no la URL completa.

Por ejemplo, utilice:

forum/topic/123

o:

/forum/topic/123

No utilice la URL antigua completa:

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

Se aceptan barras iniciales, pero se eliminan cuando se guarda el enlace permanente. Estas dos entradas son equivalentes:

/forum/topic/123
forum/topic/123

Ambas se almacenan como:

forum/topic/123

Se eliminan los espacios en blanco iniciales y finales cuando se guarda el enlace permanente.

Las cadenas de consulta forman parte de la coincidencia

Los enlaces permanentes coinciden con la ruta de solicitud completa, incluida la cadena de consulta.

Esto significa que estas dos URL son coincidencias de enlaces permanentes diferentes:

/old/topic/123
/old/topic/123?utm_source=example

Si la URL antigua tiene una cadena de consulta, debe:

  1. crear un enlace permanente que incluya la cadena de consulta, o
  2. utilizar una normalización de enlace permanente para eliminar o simplificar la cadena de consulta antes de la coincidencia

Para la mayoría de los parámetros de análisis o seguimiento, utilizar una normalización suele ser mejor que crear muchos enlaces permanentes separados.

Por ejemplo, este enlace permanente guardado:

docs/123

no necesariamente coincide con esta URL solicitada:

/docs/123?utm_source=newsletter

a menos que una normalización elimine la cadena de consulta antes de la búsqueda.

Al copiar URL antiguas de herramientas de análisis, informes de la consola de búsqueda, navegadores o campañas de correo electrónico, compruebe si se han añadido parámetros de seguimiento.

Los fragmentos de URL no forman parte de la coincidencia

Los fragmentos de URL no se envían al servidor.

Por ejemplo, esta URL:

/old/topic#post-12

llega al servidor como:

/old/topic

Un enlace permanente o una normalización no puede coincidir con:

#post-12

a menos que el carácter # esté codificado en la solicitud real como %23.

Destinos de enlaces permanentes admitidos

Un enlace permanente puede redirigir a uno de estos tipos de destino:

  • Tema
  • Publicación
  • Categoría
  • Etiqueta
  • Usuario
  • URL externa o relativa

Los destinos de URL externa o relativa se pueden utilizar para redirecciones como:

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

o:

old/preferences → /my/preferences

Utilice los destinos de URL externa con precaución. Redirigen a los visitantes fuera de su sitio y no verifican si la URL de destino existe.

Prefiera los tipos de destino internos al redirigir a temas, publicaciones, categorías, etiquetas o usuarios migrados. Utilice un destino de URL externa cuando la página de destino no esté representada por un objeto interno.

Agregar un enlace permanente manualmente

Para agregar un enlace permanente manualmente:

  1. Vaya a /admin/config/permalinks.
  2. Seleccione la pestaña Enlaces permanentes.
  3. Haga clic en Agregar enlace permanente.
  4. Ingrese la ruta antigua en el campo URL.
  5. Seleccione el Tipo de enlace permanente.
  6. Ingrese o seleccione el destino.
  7. Guarde el enlace permanente.
  8. Pruebe la URL antigua en un navegador o con curl.

Ejemplo:

URL:
forum/topic/123

Tipo de enlace permanente:
Tema

Destino:
456

Una solicitud a:

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

se redirigirá al tema 456.

Valores de destino

El valor del destino depende del tipo de enlace permanente.

Tipo de enlace permanente Destino
Tema Un tema
Publicación Una publicación
Categoría Una categoría
Etiqueta Una etiqueta
Usuario Un usuario
URL externa o relativa Una URL externa completa o una ruta relativa

Ejemplos:

forum/topic/123 → Tema 456
forum/post/789 → Publicación 789
forum/category/support → Categoría support
forum/tag/example → Etiqueta example
forum/user/alice → Usuario alice
old/privacy → https://archive.discourse.example.com/privacy
old/preferences → /my/preferences

Creación de enlaces permanentes durante una migración

Muchos importadores oficiales crean enlaces permanentes automáticamente para categorías, temas, publicaciones o usuarios migrados.

Para migraciones grandes, los enlaces permanentes suelen ser creados por el importador o por un script de migración en lugar de ingresarse manualmente uno por uno.

Si está escribiendo un importador personalizado, cree registros de enlace permanente para las URL antiguas que deben seguir funcionando después de la migración.

Por ejemplo:

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

En este ejemplo, discussion/12345 es la ruta antigua y 987 es el ID del tema de Discourse.

También se acepta una barra inicial:

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

Ambos ejemplos almacenan la URL del enlace permanente como:

discussion/12345

Para redirigir a una URL externa:

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

Al crear enlaces permanentes en un importador:

  • almacene la ruta antigua, no el dominio antiguo completo
  • incluya la cadena de consulta solo si es necesaria para la coincidencia
  • asegúrese de que cada ruta antigua se asigne a un único destino
  • compruebe si hay duplicados antes de insertar registros
  • recuerde que las URL de enlace permanente deben ser únicas

Si ejecuta varias migraciones de prueba, los IDs finales de temas y publicaciones pueden cambiar entre ejecuciones. Genere o verifique sus asignaciones finales de enlace permanente cuando los datos de migración de producción sean estables.

Qué son las normalizaciones de enlaces permanentes

Una normalización de enlace permanente cambia una ruta antigua entrante antes de buscar un enlace permanente coincidente.

Las normalizaciones son útiles cuando muchas URL antiguas siguen el mismo patrón predecible.

Por ejemplo, suponga que su antiguo foro utilizaba URL como esta:

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

pero su enlace permanente guardado es más simple:

forum/123

Una normalización puede transformar la solicitud entrante en la ruta del enlace permanente guardado:

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

Luego, el enlace permanente puede redirigir:

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

Una normalización no realiza una redirección por sí misma. Solo cambia la ruta utilizada para la búsqueda del enlace permanente.

Aún necesita un enlace permanente coincidente para la ruta normalizada.

La mayoría de los sitios no necesitan normalizaciones de enlaces permanentes. Úselas solo cuando muchas URL antiguas sigan un patrón predecible y crear un enlace permanente por cada URL antigua sea poco práctico.

Cómo funcionan juntos los enlaces permanentes y las normalizaciones

Cuando se solicita una URL antigua, el proceso es:

El visitante solicita la URL antigua
        ↓
Se aplican las normalizaciones de enlace permanente, si están configuradas
        ↓
Se realiza una búsqueda de enlace permanente utilizando la ruta resultante
        ↓
Si existe un enlace permanente coincidente, el visitante es redirigido

Por ejemplo:

URL solicitada:
/old/topic/123?utm_source=newsletter

La normalización la cambia a:
old/topic/123

El enlace permanente la redirige a:
/t/new-topic-title/456

Agregar una normalización de enlace permanente

Las normalizaciones de enlace permanente se configuran desde la configuración de enlaces permanentes.

Para agregar una:

  1. Vaya a /admin/config/permalinks.
  2. Seleccione la pestaña Configuración.
  3. Agregue una regla a la configuración permalink normalizations.
  4. Guarde la configuración.
  5. Pruebe una URL antigua que deba ser normalizada.
  6. Confirme que la ruta normalizada coincida con un enlace permanente existente.

La sintaxis es:

/<regex>/<replacement>

Las reglas múltiples se separan con |.

Por ejemplo:

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

Esto puede transformar:

old/topic/123-my-old-title

en:

topic/123

La reemplazo utiliza la sintaxis de reemplazo de Ruby, por lo que los grupos de captura se escriben como:

\1
\2
\3

Reglas importantes de normalización

Mantenga las reglas de normalización simples.

  • Las normalizaciones utilizan expresiones regulares de Ruby.
  • Los caracteres / literales en la parte de la expresión regular deben escaparse como \/.
  • Los caracteres / literales en la parte de reemplazo no necesitan escaparse.
  • Las reglas de normalización múltiples se separan con |.
  • Dado que | separa reglas, evite utilizar la alternancia de expresiones regulares con |.
  • Cada regla utiliza un único reemplazo, no un reemplazo global.
  • Las reglas se aplican en orden.
  • Las reglas coincidentes se aplican secuencialmente.
  • Las normalizaciones se aplican antes de la búsqueda del enlace permanente.
  • Las normalizaciones también se aplican al guardar registros de enlace permanente.
  • El validador de configuración detecta expresiones regulares no válidas, pero puede que no detecte cada regla que se comporta de manera diferente a la intención.

:warning: Advertencia: Las normalizaciones se aplican cuando se guardan los registros de enlace permanente. Si ingresa una URL no normalizada en la interfaz de administración, es posible que se almacene como el resultado normalizado. Si agrega o cambia normalizaciones después de crear enlaces permanentes, pruebe cuidadosamente y verifique cómo se almacenan las nuevas URL de enlace permanente guardadas.

Ejemplos de normalización

Redirigir una URL antigua con texto de título adicional

URL antiguas:

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

Puede normalizarlas a rutas de enlace permanente más simples:

forum/123
forum/456

Ejemplo de normalización:

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

Luego, cree enlaces permanentes:

forum/123 → Tema 1001
forum/456 → Tema 1002

Ignorar cadenas de consulta de seguimiento

URL antigua solicitada:

/docs/123?utm_source=newsletter

Enlace permanente guardado:

docs/123

Normalización:

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

Esto elimina la cadena de consulta antes de la búsqueda del enlace permanente.

Conservar un parámetro de consulta importante

Algunos foros antiguos utilizan parámetros de consulta como identificador estable del tema.

Por ejemplo:

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

Es posible que desee normalizar estas a:

viewtopic.php?t=123

Ejemplo de normalización:

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

Luego, cree un enlace permanente:

viewtopic.php?t=123 → Tema 456

Redirecciones con expresiones regulares y comodines

El campo de URL del enlace permanente no admite expresiones regulares ni comodines.

Esto no funcionará como una URL de enlace permanente:

forum/topic/*

Esto tampoco funcionará como una URL de enlace permanente:

forum/topic/(\d+)

Si necesita un manejo basado en patrones, utilice una normalización de enlace permanente para reescribir la URL entrante a una forma que pueda coincidir con un enlace permanente guardado exacto.

Por ejemplo:

/forum/topic/123-title → forum/topic/123

Luego, cree un enlace permanente normal exacto:

forum/topic/123 → Tema 456

Precedencia de rutas y rutas integradas

El enrutamiento de enlaces permanentes se verifica después de las rutas de aplicación normales.

Esto significa que una ruta existente válida puede resolverse normalmente antes de que se verifique un enlace permanente.

Tenga cuidado con las URL antiguas que comienzan con rutas integradas como:

/t
/c
/u
/tag
/tags

Por ejemplo, una URL de antiguo foro como esta puede parecer una ruta de categoría integrada:

/c/blog/old-platform-url/ba-p/12345

Si una URL antigua entra en conflicto con una ruta existente válida, la ruta válida puede tener precedencia sobre el enlace permanente.

De manera similar, si crea un enlace permanente para una ruta que parece una ruta de tema existente, como:

t/123

la ruta de tema normal puede manejarse antes de la búsqueda del enlace permanente.

Algunas rutas integradas de «no encontrado» tienen un comportamiento de respaldo adicional, pero no debe depender de ello. Pruebe siempre las URL antiguas que se superponen con las rutas integradas.

Si necesita que una URL de tema antigua se redirija a otro lugar, la URL del tema antiguo generalmente no debe seguir resolviéndose como una ruta de tema válida.

Permisos y contenido privado

Los enlaces permanentes a destinos internos respetan los permisos normales.

Si un enlace permanente apunta a un tema, publicación, categoría, etiqueta o usuario privado o restringido, los visitantes que no puedan acceder a ese destino recibirán un 404 en lugar de una redirección.

Los enlaces permanentes a URL externas no verifican los permisos de contenido interno.

Caracteres especiales y URL codificadas

Pruebe las URL con caracteres especiales con cuidado.

Esto incluye URL con:

  • espacios
  • +
  • %
  • &
  • '
  • :
  • paréntesis
  • caracteres no latinos

La coincidencia de enlaces permanentes utiliza la ruta de solicitud codificada después de eliminar la barra inicial y aplicar las normalizaciones configuradas. Las diferencias de codificación pueden evitar que una URL coincida con el enlace permanente que espera.

Por ejemplo, estos pueden no ser equivalentes dependiendo de cómo se solicite y almacene la URL antigua:

old/topic/hello%20world
old/topic/hello+world

Utilice %20 para los espacios en los ejemplos de URL. En una ruta de URL, + no es lo mismo que un espacio.

Caracteres como &, ? y # tienen un significado especial en las URL. Si se pretende que sean caracteres de ruta literales, deben estar codificados en porcentaje.

En caso de duda, pruebe la URL antigua exacta que los usuarios o los motores de búsqueda solicitarán.

Limitaciones

Los enlaces permanentes están diseñados para redirigir rutas antiguas a nuevos destinos. No son un motor de redirección o reescritura de propósito general.

Limitaciones importantes:

  • Las URL de enlace permanente se almacenan como rutas y cadenas de consulta, no como URL completas.
  • Las URL completas no se convierten automáticamente en rutas.
  • Las URL de enlace permanente deben ser únicas después de la normalización.
  • Una URL de enlace permanente puede tener un único destino.
  • Los destinos admitidos se limitan a temas, publicaciones, categorías, etiquetas, usuarios y URL externas o relativas.
  • Los enlaces permanentes utilizan 301 Moved Permanently; no hay una opción por enlace permanente para 302.
  • El campo de URL del enlace permanente no admite comodines ni expresiones regulares.
  • Las cadenas de consulta forman parte de la clave de búsqueda.
  • Los fragmentos de URL, como #post-12, no se envían al servidor y no se pueden coincidir.
  • La coincidencia no utiliza el esquema o el host de la solicitud.
  • Las rutas nativas se verifican antes de la ruta de enlace permanente de captura general.
  • Los destinos internos están sujetos a verificación de permisos.
  • Los destinos de URL externa omiten las verificaciones de permisos de contenido interno.
  • Las normalizaciones de enlace permanente utilizan expresiones regulares de Ruby.
  • Las reglas de normalización se separan con |, por lo que evite utilizar | como alternancia de expresiones regulares.
  • Las reglas de normalización utilizan un único reemplazo por regla, no un reemplazo global.
  • Las normalizaciones se aplican tanto antes de la búsqueda como antes de guardar los registros de enlace permanente.
  • El validador de configuración detecta expresiones regulares no válidas, pero puede que no detecte cada regla que se comporta de manera diferente a la intención.

Para la mayoría de los sitios, los enlaces permanentes simples de uno a uno son más fáciles de mantener que las reglas de normalización complejas. Utilice normalizaciones solo cuando las URL antiguas sigan un patrón predecible.

Evite redirigir cada URL antigua a la página de inicio

No redirija todas las URL antiguas a su página de inicio.

Redirija cada URL antigua a la página nueva más relevante. Si no hay contenido equivalente, un 404 puede ser mejor que enviar a los usuarios y a los motores de búsqueda a una página no relacionada.

Las buenas redirecciones son específicas:

old/topic/123 → nuevo tema sobre el mismo asunto

Las malas redirecciones son genéricas:

old/topic/123 → página de inicio
old/topic/456 → página de inicio
old/topic/789 → página de inicio

Pruebe sus redirecciones

Después de crear enlaces permanentes o normalizaciones, pruebe una muestra de URL antiguas.

Puede probar en un navegador o utilizar:

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

Una redirección de enlace permanente funcional debería devolver una redirección permanente similar a:

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

Pruebe ejemplos de cada patrón de URL antigua, incluyendo:

  • URL de temas antiguos
  • URL de categorías antiguas
  • URL de publicaciones antiguas
  • URL con cadenas de consulta
  • URL con caracteres especiales
  • URL de resultados de búsqueda
  • URL de correos electrónicos o documentación antiguos
  • URL que comienzan con rutas integradas como /t, /c o /u
  • redirecciones a URL externas

Solución de problemas

Si una URL antigua no se redirige, compruebe estas causas comunes:

  1. Confirme que el enlace permanente existe.
  2. Confirme que la URL del enlace permanente es la ruta antigua, no el dominio antiguo completo.
  3. Compruebe si la URL antigua incluye una cadena de consulta.
  4. Si utiliza una normalización, confirme que la ruta normalizada coincida con un enlace permanente guardado.
  5. Compruebe si una ruta integrada tiene precedencia.
  6. Compruebe si el destino es privado o restringido.
  7. Compruebe las diferencias de codificación, como %20 frente a +.
  8. Compruebe si una normalización cambió la URL cuando se guardó el enlace permanente.
  9. Confirme que el contenido fue migrado.
  10. Pruebe con la URL antigua exacta desde un navegador o con curl -I.

Los problemas más comunes son:

  • ingresar la URL antigua completa en lugar de la ruta antigua
  • cadenas de consulta faltantes o inesperadas
  • esperar que los comodines o las expresiones regulares funcionen en el campo de URL del enlace permanente
  • URL antiguas que se superponen con rutas integradas
  • destinos privados o restringidos
  • diferencias de codificación
  • normalizaciones que cambian la ruta inesperadamente

Notas sobre SEO

Después de una migración, los motores de búsqueda pueden informar que las URL antiguas están redirigidas. Esto es esperado si esas URL antiguas ahora se redirigen a las páginas nuevas correctas.

Para obtener los mejores resultados:

  • redirija las URL antiguas a páginas nuevas relevantes
  • evite cadenas de redirección innecesarias
  • evite redirigir muchas URL no relacionadas a la página de inicio
  • mantenga las redirecciones durante el tiempo suficiente para que los usuarios y los motores de búsqueda se actualicen
  • pruebe las URL importantes desde su antiguo mapa del sitio, análisis de datos o datos de la consola de búsqueda
37 Me gusta