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

Rate this content
Bookmark
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.

From Author:

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 

This talk has been presented at TypeScript Congress 2022, check out the latest edition of this JavaScript Conference.

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 Transcription

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
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
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
Today's Talk focuses on React's best types and JSX. It covers the types of JSX and React components, including React.fc and React.reactnode. The discussion also explores JSX intrinsic elements and react.component props, highlighting their differences and use cases. The Talk concludes with insights on using React.componentType and passing components, as well as utilizing the react.element ref type for external libraries like React-Select.
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
React and TypeScript have a strong relationship, with TypeScript offering benefits like better type checking and contract enforcement. Failing early and failing hard is important in software development to catch errors and debug effectively. TypeScript provides early detection of errors and ensures data accuracy in components and hooks. It offers superior type safety but can become complex as the codebase grows. Using union types in props can resolve errors and address dependencies. Dynamic communication and type contracts can be achieved through generics. Understanding React's built-in types and hooks like useState and useRef is crucial for leveraging their functionality.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced Conference 2023React Advanced Conference 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.
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
Top Content
Daniel Rowe discusses building a TypeScript-first framework at TypeScript Congress and shares his involvement in various projects. Nuxt is a progressive framework built on Vue.js, aiming to reduce friction and distraction for developers. It leverages TypeScript for inference and aims to be the source of truth for projects. Nuxt provides type safety and extensibility through integration with TypeScript. Migrating to TypeScript offers long-term maintenance benefits and can uncover hidden bugs. Nuxt focuses on improving existing tools and finds inspiration in frameworks like TRPC.
Deja de Escribir tus Rutas
Vue.js London 2023Vue.js London 2023
30 min
Deja de Escribir tus Rutas
Designing APIs is a challenge, and it's important to consider the language used and different versions of the API. API ergonomics focus on ease of use and trade-offs. Routing is a misunderstood aspect of API design, and file-based routing can simplify it. Unplugging View Router provides typed routes and eliminates the need to pass routes when creating the router. Data loading and handling can be improved with data loaders and predictable routes. Handling protected routes and index and ID files are also discussed.

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.
Dominando conceptos avanzados en TypeScript
React Summit US 2023React Summit US 2023
132 min
Dominando conceptos avanzados en TypeScript
Top Content
Featured WorkshopFree
Jiri Lojda
Jiri Lojda
TypeScript no es solo tipos e interfaces. Únete a esta masterclass para dominar características más avanzadas de TypeScript que harán tu código a prueba de balas. Cubriremos tipos condicionales y notación de inferencia, cadenas de plantillas y cómo mapear sobre tipos de unión y propiedades de objetos/arrays. Cada tema se demostrará en una aplicación de muestra que se escribió con tipos básicos o sin tipos en absoluto y juntos mejoraremos el código para que te familiarices más con cada característica y puedas llevar este nuevo conocimiento directamente a tus proyectos.
Aprenderás:- - ¿Qué son los tipos condicionales y la notación de inferencia?- ¿Qué son las cadenas de plantillas?- Cómo mapear sobre tipos de unión y propiedades de objetos/arrays.
Consejos y Trucos Profundos de TypeScript
Node Congress 2024Node Congress 2024
83 min
Consejos y Trucos Profundos de TypeScript
Top Content
Featured 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.
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.
Building Your Own Custom Type System
React Summit 2024React Summit 2024
38 min
Building Your Own Custom Type System
Featured Workshop
Kunal Dubey
Kunal Dubey
I'll introduce the audience to a concept where they can have end-to-end type systems that helps ensure typesafety across the teams Such a system not only improves communication between teams but also helps teams collaborate effectively and ship way faster than they used to before. By having a custom type system, teams can also identify the errors and modify the API contracts on their IDE, which contributes to a better Developer Experience. The workshop would primarily leverage TS to showcase the concept and use tools like OpenAPI to generate the typesystem on the client side. 
Frictionless Development With Unified Type System
JSNation 2024JSNation 2024
113 min
Frictionless Development With Unified Type System
Featured Workshop
Ejiro Asiuwhu
Ejiro Asiuwhu
Imagine developing where frontend and backend sing in harmony, types dance in perfect sync, and errors become a distant memory. That's the magic of TypeScript Nirvana!
Join me on a journey to unveil the secrets of unified type definitions, the key to unlocking frictionless development. We'll dive into:
- Shared language, shared love: Define types once, share them everywhere. Consistency becomes your BFF, errors your worst nightmare (one you'll rarely see).- Effortless coding: Ditch the manual grind of type checking. TypeScript's got your back, freeing you to focus on building awesomeness.- Maintainability magic: With crystal-clear types guiding your code, maintaining it becomes a walk in the park. More time innovating, less time debugging.- Security fortress: TypeScript's type system shields your app from common vulnerabilities, making it a fortress against security threats.