Cómo manejar correctamente los cambios de URL slug en Next.js

Rate this content
Bookmark

Si estás utilizando un CMS sin cabeza para almacenar contenido, también trabajas con URL slugs, las últimas partes de cualquier URL. El problema es que los editores de contenido pueden cambiar libremente los slugs, lo que puede causar errores 404, pérdida de rangos de página, enlaces rotos y, al final, visitantes confundidos en tu sitio. En esta charla, presentaré una solución para mantener un historial de URL slugs en el CMS y explicaré cómo implementar un mecanismo de redirección adecuado (¡usando TypeScript!) para páginas generadas dinámicamente en un sitio web de Next.js.

Añadir a las notas de la charla: https://github.com/ondrabus/kontent-boilerplate-next-js-ts-congress-2022 

FAQ

Es crucial manejar los cambios en URL slugs porque si un URL slug es modificado por un editor, las visitas previas pueden resultar en errores 404 si los usuarios intentan acceder mediante el antiguo URL, lo que puede afectar negativamente la experiencia del usuario y el rendimiento SEO del sitio.

Un URL slug es una parte del URL que se utiliza para identificar de manera única una página en el sitio web y generalmente es editable por los usuarios en un CMS sin cabeza como Content by Kentico.

En Next.js, se debe utilizar el método getStaticPaths para proporcionar todos los URL slugs, incluidos los históricos, y getStaticProps para determinar si el slug solicitado es histórico y, de ser así, emitir una redirección apropiada a la página actual.

Se propone crear una lista de todos los URL slags, incluyendo los actuales y los históricos, y luego serializar esta información en un archivo que posteriormente será leído en getStaticProps para determinar si se requiere una redirección.

En Next.js, dentro de getStaticProps, se verifica si el URL slug es histórico comparándolo con una lista predefinida de slugs. Si es histórico, se retorna un objeto de redirección indicando el destino correcto y se marca como permanente.

Si un URL slug es cambiado y no se maneja adecuadamente, los usuarios que intenten acceder mediante el antiguo URL recibirán un error 404, lo que puede llevar a una mala experiencia de usuario y pérdida de tráfico SEO.

Se utiliza un elemento personalizado especial llamado urlslug-history, que es de código abierto y permite rastrear automáticamente todos los cambios realizados a un URL slug.

Ondrej Polesny
Ondrej Polesny
10 min
29 Apr, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla explica cómo manejar los cambios de URL slug en Next.js utilizando los métodos getStaticPaths y getStaticProps. Cubre la implementación de redirecciones y proporciona una solución para eliminar la necesidad de que los editores realicen pasos adicionales. El enfoque implica el seguimiento de los cambios de URL slug y la emisión de redirecciones adecuadas. El orador anima a la audiencia a hacer preguntas o compartir sus experiencias con el manejo de URL slugs.

1. Manejo de cambios en URL Slack en Next.js

Short description:

Hola a todos. Soy Andrey, evangelista de desarrolladores en Content by Kentico. Hoy, explicaré cómo manejar los cambios en URL Slack en Next.js. Cada elemento de contenido en el CMS sin cabeza contiene un URL slag, y cuando el editor lo cambia, el antiguo URL slag deja de existir, resultando en errores 404 para los visitantes. Para manejar esto correctamente, necesitamos conocer el historial de URL slag y usar los métodos getstaticpaths y getstaticprops en Next.js para emitir redirecciones. Comencemos con el lado del contenido, donde podemos usar el elemento personalizado urlslug-history para rastrear los cambios de URL slag.

Hola a todos. Soy Andrey, evangelista de desarrolladores en Content by Kentico. Y hoy, quiero contarles cómo manejar correctamente los cambios en URL Slack en Next.js.

Ahora, primero que nada, ¿por qué deberíamos preocuparnos por los URL slags? Cada elemento de contenido que se almacena en el headless CMS y que realmente estás almacenando o mostrando como una página en tu implementación de sitio contiene un URL slag. Ahora, el problema es cuando el editor entra en ese elemento de contenido, cambia el URL slag, y tu implementación de sitio simplemente toma el cambio, reconstruye la página, y la antigua página, el antiguo URL slag simplemente deja de existir. El problema es que si esa página solía tener un buen ranking de página en los motores de búsqueda, o usaste esa página en tus campañas de marketing, todos esos visitantes que están usando esa URL ahora obtendrán errores 404. Y en estos días realmente no podemos permitirnos visitantes confundidos, ¿verdad?

Entonces, lo que necesitamos hacer es, primero, necesitamos saber para cada página, cada elemento de contenido, necesitamos conocer el historial de URL slag. Ves aquí, el ejemplo es que la página actual tiene un URL slug, hello-typescript-congress, pero en el pasado solía tener un URL slug, typescript-congress y hello-conference, necesitamos conocer el historial para poder emitir las redirecciones correctamente. Lo siguiente es para Next.js, ahora vamos a estar usando Next.js y contenido en este ejemplo, pero si estás usando un framework diferente, puedes aplicar los mismos principios allí. Aquí solo estamos hablando de Next.js, por lo que tenemos dos métodos. Tenemos getstaticpaths y getstaticprops. En getstaticpaths, necesitamos proporcionar todos los URL slugs donde hay una página para nosotros para generar. En ese caso, necesitamos proporcionar los tres URL slugs. Así que, esos son los históricos y los actuales también. Y el último paso, el tercer paso es agregar una redirección adecuada en getstaticprops. Allí necesitamos averiguar en base al slug, si este es un slug actual, como el hello-typescript-congress, que es la página objetivo, o si el slug que estamos usando es uno histórico, y deberíamos redirigir al visitante a una página actual. En este caso, serían el typescript-congress, hello-conferences, que emitirán redirecciones. Entonces, ¿cómo podemos hacer esto en Next.js? Echemos un vistazo. Comencemos en el contenido primero. En el lado del contenido de las cosas, preparé un tipo de contenido llamado conferencia. Y cuando miras el elemento de contenido, ya está usando ese tipo de contenido. Ves en el contenido que tenemos un elemento personalizado especial urlslug-history que puedes usar en tu proyecto. Está disponible de código abierto, por lo que simplemente podemos implementarlo en Netlify o Vercel y usarlo tal como lo estoy usando aquí. Realmente rastrea todos los cambios que haces a un urlslug. Así que ves aquí, ahora el urlslug es typescript-congress-2022. Si lo cambio a typescript-congress, automáticamente registra el cambio. Y cuando publico la página, va a almacenar el cambio dentro del elemento de contenido. Así que ves que esto está en el historial. Ahora, podemos hacer esto tantas veces como queramos. Simplemente vamos a obtener una lista de cadenas de la API, pero este es el primer paso.

2. Implementación de cambios en URL Slug en Next.js

Short description:

En Next.js, debes proporcionar todas las rutas a getStaticPaths o como resultado a Next.js. En getStaticProps, debes emitir la redirección si es una página que debe ser redirigida. Creamos una lista de todos los slugs y todos los slugs actuales a los que deben redirigir. Almacenamos todas las rutas en la caché y proporcionamos todos los slugs, históricos y actuales, de vuelta a Next.js. Emitimos una redirección adecuada si descubrimos que deberíamos.

Necesitas conocer todos los urlslugs, los históricos y los actuales. Ahora echemos un vistazo a la implementación. En Next.js, tengo una página simple, slug-tsx. Ahora, todo esto se basa en un boilerplate de contenido de Next.js, por lo que no hay mucha funcionalidad. Pero aquí ves que hay dos métodos, getStaticPaths, getStaticProps. Y como mencioné en la presentación al principio, necesitas proporcionar todas las rutas a getStaticPaths o como resultado, a Next.js.

En getStaticProps, necesitas emitir la redirección si es una página que debe ser redirigida. Así que aquí solo necesitamos hacer un cambio simple y agregar al parámetro de elementos el historial también. Así que antes, solo estábamos usando el URL slug, pero ahora queremos usar el historial de URL slug también para obtener realmente todas las rutas. Y ahora necesitamos obtener todas las rutas en una lista simple.

Ahora, si solo obtenemos las rutas en getStaticProps, tendríamos que hacer una verificación adicional de la API con la API de contenido para ver si el slug es uno histórico o un actual. Así que lo que voy a hacer es que voy a crear una lista de todos los slugs y todos los slugs actuales a los que deben redirigir. Ahora, voy a hacer la implementación aquí, voy a avanzar rápidamente y luego voy a explicar el code en un segundo.

Bien, lo que implementé aquí es que estamos obteniendo todas las rutas del CMS de contenido, y en realidad estamos proporcionando todas esas rutas de vuelta como una estructura IPagePath, que puedes ver que contiene solo dos propiedades path y redirectsTo. Path es el URL slug, el actual, y redirectsTo es, en caso de que estemos trabajando con la ruta histórica, aquí vamos a mantener la ruta actual de cualquier página. Así que ves que para el elemento actual que viene del contenido, estamos proporcionando una ruta que es la ruta actual del elemento, la de la versión publicada de la página. Y luego estamos creando una estructura de las rutas históricas, slugs históricos, y redirigen todos a la ruta de la página actual.

Ahora el problema es, realmente no podemos tomar toda la estructura y proporcionarla a Next.js para que la obtengamos en getStaticProps. La razón es, Next.js solo nos permitirá transferir el slug, porque está en el nombre del archivo, es la variable en el camino a la página. Así que no vamos a poder transferir esto a getStaticProps y evitar los problemas de performance. Así que lo que vamos a hacer es, vamos a hacer un truco sugerido por Versal, donde simplemente vamos a tomar todas las rutas, las vamos a serializar en un archivo físico, y luego vamos a tomar ese archivo de vuelta en getStaticProps. Voy a hacer de nuevo la implementación y avanzar rápidamente.

Ahora ves aquí que estoy almacenando todas las rutas en la caché. Lo último que necesito hacer aquí es proporcionar todos los slugs, este es el segundo punto de la presentación. Necesitamos obtener todas las rutas, históricas y actuales, y devolverlas a Next.js aquí. Porque solo estamos diciendo a Next.js, en esta ruta, no hay un 404, hay una página aquí. Y ahora necesitamos hacer el tercer paso, y eso es emitir una redirección adecuada si descubrimos que deberíamos. Así que, en este caso, simplemente estamos tomando la ruta de la caché y si hay una página que debería ser redirigida, tendrá el campo redirects.to. Porque estos son todos los URL slugs históricos, y necesitamos redirigirlos a esta ruta. Así que, podemos hacer una condición simple aquí, si existe path.redirects.to.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Concurrent React y Server Components están cambiando la forma en que pensamos sobre el enrutamiento, la renderización y la obtención de datos en las aplicaciones web. Next.js recientemente compartió parte de su visión para ayudar a los desarrolladores a adoptar estas nuevas características de React y aprovechar los beneficios que desbloquean.En esta charla, exploraremos el pasado, presente y futuro del enrutamiento en las aplicaciones de front-end y discutiremos cómo las nuevas características en React y Next.js pueden ayudarnos a arquitectar aplicaciones más eficientes y con más funciones.
TypeScript y React: Secretos de un matrimonio feliz
React Advanced Conference 2022React Advanced Conference 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
TypeScript y React son inseparables. ¿Cuál es el secreto de su exitosa unión? Bastante código extrañamente extraño. Aprende por qué useRef siempre se siente extraño, cómo manejar los genéricos en los hooks personalizados y cómo los tipos de unión pueden transformar tus componentes.
Los tipos más útiles de React
React Day Berlin 2023React Day Berlin 2023
21 min
Los tipos más útiles de React
Top Content
No pensamos en React como si tuviera sus propios tipos. Pero los tipos de React son una parte fundamental del marco de trabajo - supervisados por el equipo de React, y coordinados con las principales lanzamientos de React.En esta charla de codificación en vivo, veremos todos los tipos que te has estado perdiendo. ¿Cómo obtienes el tipo de props de un componente? ¿Cómo sabes qué ref toma un componente? ¿Deberías usar React.FC? ¿Y qué pasa con JSX.Element?Te irás con un montón de ideas emocionantes para llevar a tus aplicaciones de React, y esperamos que con una nueva apreciación por las maravillas de React y TypeScript trabajando juntos.
Deja de Escribir tus Rutas
Vue.js London 2023Vue.js London 2023
30 min
Deja de Escribir tus Rutas
Cuanto más trabajas en una aplicación, más complicado se vuelve su enrutamiento y más fácil es cometer un error. "¿Se llamaba la ruta usuarios o usuario?", "¿Tenía un parámetro id o era userId?". Si solo TypeScript pudiera decirte cuáles son los nombres y parámetros posibles. Si solo no tuvieras que escribir una sola ruta más y dejar que un complemento lo haga por ti. En esta charla repasaremos lo que se necesitó para traer rutas automáticamente tipadas para Vue Router.
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
TypeScript Congress 2023TypeScript Congress 2023
31 min
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
Voy a profundizar en los internos de Nuxt para describir cómo hemos construido un marco de trabajo primero-TypeScript que está profundamente integrado con el IDE del usuario y la configuración de comprobación de tipos para ofrecer seguridad de tipo de pila completa de extremo a extremo, sugerencias para diseños, middleware y más, opciones de configuración de tiempo de ejecución tipadas e incluso enrutamiento tipado. Además, destacaré lo que más me emociona hacer en los días venideros y cómo TypeScript hace eso posible no solo para nosotros sino para cualquier autor de bibliotecas.
El Nuevo Enrutador de Aplicaciones de Next.js
React Summit 2023React Summit 2023
27 min
El Nuevo Enrutador de Aplicaciones de Next.js
Next.js 13.4 lanzó recientemente la versión estable del "Enrutador de Aplicaciones" - un cambio transformador para el núcleo del framework. En esta charla, compartiré por qué hicimos este cambio, los conceptos clave que debes conocer y por qué estoy emocionado por el futuro de React.

Workshops on related topic

React, TypeScript y TDD
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript y TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
React Advanced Conference 2022React Advanced Conference 2022
148 min
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
¿Eres un desarrollador de React tratando de obtener los máximos beneficios de TypeScript? Entonces esta es la masterclass para ti.En esta masterclass interactiva, comenzaremos desde lo básico y examinaremos los pros y contras de las diferentes formas en que puedes declarar componentes de React usando TypeScript. Después de eso, pasaremos a conceptos más avanzados donde iremos más allá de la configuración estricta de TypeScript. Aprenderás cuándo usar tipos como any, unknown y never. Exploraremos el uso de predicados de tipo, guardias y comprobación exhaustiva. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapa de tipo nuevo. Y comenzaremos a programar en el sistema de tipos de TypeScript usando tipos condicionales e inferencia de tipos.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Consejos y Trucos Profundos de TypeScript
Node Congress 2024Node Congress 2024
83 min
Consejos y Trucos Profundos de TypeScript
Top Content
Workshop
Josh Goldberg
Josh Goldberg
TypeScript tiene un sistema de tipos poderoso con todo tipo de características sofisticadas para representar estados de JavaScript salvajes y extravagantes. Pero la sintaxis para hacerlo no siempre es sencilla, y los mensajes de error no siempre son precisos al decirte qué está mal. Vamos a profundizar en cómo funcionan muchas de las características más poderosas de TypeScript, qué tipos de problemas del mundo real resuelven, y cómo dominar el sistema de tipos para que puedas escribir código TypeScript verdaderamente excelente.
Fetch, useEffect, React Query, SWR, ¿qué más?
React Advanced Conference 2023React Advanced Conference 2023
102 min
Fetch, useEffect, React Query, SWR, ¿qué más?
Top Content
WorkshopFree
Ondrej Polesny
Ondrej Polesny
En esta masterclass, primero, repasaremos las diferentes formas en que puedes consumir APIs en React. Luego, probaremos cada una obteniendo contenido de un CMS sin cabeza (tanto con REST como con GraphQL) y verificando en detalle cómo funcionan.
Aunque no se requiere un conocimiento avanzado de React, esta será una sesión práctica, por lo que necesitarás clonar un repositorio de GitHub preconfigurado y utilizar tu editor de programación React preferido, como VS Code.
Aprenderás:- Qué diversas opciones de obtención de datos hay en React- Cuáles son las ventajas y desventajas de cada una- Cuáles son los casos de uso típicos y cuándo cada estrategia es más beneficiosa que otras