Los temas antiguos publicados mediante la incrustación de WordPress carecen de las etiquetas x-robots: noindex y canonical

Hola a todos,

He notado un comportamiento extraño en temas antiguos que se publicaron automáticamente desde WordPress a Discourse (para usarse como sección de comentarios).

Normalmente, cuando se publica una entrada de esta manera, Discourse agrega correctamente la etiqueta X-Robots-Tag: noindex en la cabecera HTTP y establece la URL canonical apuntando de nuevo a la entrada del blog en WordPress.

Sin embargo, he descubierto que los temas más antiguos están perdiendo estas etiquetas. La cabecera noindex desaparece y la etiqueta canonical ya no está presente. Aquí hay algunos ejemplos de temas donde esto está ocurriendo:

¿Alguien sabe cómo solucionar este problema?

Tengan en cuenta que no tengo forma de saber exactamente cuántos temas han sido afectados hasta ahora, pero parece que son bastantes.

Sería genial si hubiera una casilla de verificación en la configuración de la categoría (o etiqueta?) que, al activarse, agregara automáticamente noindex a todos los temas publicados bajo esa categoría. Algo como:

[ ] Ocultar los temas de esta categoría en los resultados de búsqueda.

Hola Thiago,

Solo para asegurarme de entender, ¿estás diciendo lo siguiente:

  1. Tienes la configuración del sitio Embed set canonical URL activada y siempre ha estado activada.
  2. Has publicado varios temas desde tu WordPress a tu Discourse a través del plugin WordPress Discourse durante un período de tiempo.
  3. Hasta hace poco, todos los temas de Discourse publicados como se describe en 2 tenían un link rel="canonical" con el href establecido en la URL de WordPress en su head.
  4. En algún momento reciente, crees que un subconjunto de esos temas que anteriormente cumplían con 3 ahora tienen un link rel="canonical" con el href establecido en la URL de Discourse.

¿Es correcto?

¡Hola, Angus!

Sí, eso es.

La opción embed set canonical URL también está habilitada:

Puedes ver aquí que los nuevos temas se publican con las etiquetas noindex y canonical. Pero estoy viendo temas antiguos sin estas etiquetas.

Thiago, si tienes acceso al servidor, ¿podrías por favor obtener el ID de un tema donde la URL canónica no esté funcionando, ejecutar lo siguiente en la consola de Rails y compartir el resultado?

./launcher enter app
rails c
TopicEmbed.with_deleted.find_by(topic_id: agrega aquí el ID del tema)
discourse(prod)> TopicEmbed.with_deleted.find_by(topic_id: 73608)
=> nil
discourse(prod)> TopicEmbed.with_deleted.find_by(topic_id: 79015)
=> nil
discourse(prod)> TopicEmbed.with_deleted.find_by(topic_id: 74248)
=> nil
discourse(prod)> TopicEmbed.with_deleted.find_by(topic_id: 76598)
=> nil

Esa es la cuestión. Para que funcione la función de URL canónica para incrustaciones, el tema necesita un registro de topic_embed. ¿Se te ocurre alguna razón por la que esos temas podrían no tener registros de incrustación?

Honestamente, no sé qué pudo haber causado que esos temas no tuvieran sus registros de topic_embed.

Pero si miramos el panorama general, ¿no tendría más sentido seguir la configuración que sugerí antes? Si agregamos una casilla de verificación directamente en la configuración de la categoría para aplicar noindex a todos los temas dentro de ella, no tendríamos que depender de la función de incrustación ni preocuparnos por si esos registros existen desde el principio.

Aunque eso pueda tener sentido para tu sitio, sería una funcionalidad diferente a la forma en que funcionan las URL canónicas de los temas incrustados. Podrías implementarlo, pero tendrías que hacerlo como un plugin personalizado.

Las URL canónicas para las incrustaciones funcionan como se espera; sin embargo, parece que en algún momento los registros de incrustación fueron eliminados o se realizó alguna otra operación en tu sitio. Discourse no elimina permanentemente los registros de incrustación de temas, por lo que debe haber ocurrido algo más. A menos que realices un trabajo personalizado, necesitarás volver a publicar esos temas para crear los registros de incrustación nuevamente.

Aunque esto se comporta de manera diferente a las incrustaciones de temas, el control de indexación a nivel de categoría es un requisito básico de SEO para cualquier CMS moderno. Hay varios otros temas de Meta sobre este asunto, y hacerlo nativo resolvería múltiples casos de uso de una sola vez.

Podría intentar crear un plugin usando IA, ya que Ruby no es mi pila tecnológica, pero esto realmente debería ser una función nativa.

En cuanto a los registros faltantes: no hemos ejecutado ningún comando u operación de base de datos que pudiera causar esto. Además, volver a publicar no es viable. Tenemos casi 50 000 publicaciones y ni siquiera sabemos cuáles están afectadas. Corregir esto requeriría scripts complejos de API para encontrar, eliminar y volver a publicar todo…