Incrustar comentarios de Discourse en otro sitio web mediante Javascript

Tu caso de uso definitivamente no está soportado de forma nativa en Discourse y requeriría cierto desarrollo personalizado. Te recomendaría explorar el desarrollo de plugins o contratar a un consultor para ayudarte a implementarlo.

2 Me gusta

Añadiría a la sección de Solución de problemas que, si Discourse no puede analizar el contenido de tu página o publicación de blog para crear un nuevo tema, la incrustación fallará (y no se dará ninguna indicación al respecto). Intenta primero incrustar un tema específico y luego aprovecha las opciones para analizar tu página.

3 Me gusta

¡Esto es genial! El único contratiempo que tengo es que no puedo determinar cómo usar el selector CSS correcto para extraer el meta-description y usarlo como el primer mensaje.
He probado varias iteraciones como esta. ¿Alguna sugerencia?

1 me gusta

Si estás intentando extraer el contenido de la etiqueta meta de la sección head de tu sitio, creo que no será posible.

2 Me gusta

Sigo lamentando que esto no simplemente genere un cuadro único para el enlace proporcionado en la incrustación, en lugar de realizar una importación más elaborada de texto y, potencialmente, imágenes.

Ciertamente, para sitios con datos y diseños de página complejos, alguien debe haber considerado un escenario en el que el tema sirviera como marcador de posición para discusiones y también como una forma de dirigir a las personas al sitio remoto con el artículo o la historia.

¿Por favor? :slight_smile:

3 Me gusta

Así que estamos considerando implementar esto en algunos blogs y artículos de nuestro sitio principal y utilizar el foro. Esta mañana, en una reunión, mi persona de marketing dijo que era una mala idea porque cada publicación creada en el foro parecería contenido duplicado con nuestro blog, ya que tienen el mismo título y muestran el mismo primer párrafo. Lo demostró con una búsqueda en Google del ejemplo. ¿Existe alguna función integrada que ayude a mostrarle a Google que estos no son duplicados, o podrían aplicar una etiqueta no index a estas publicaciones?

4 Me gusta

Hmm, eso es interesante, porque si añadimos noindex, los comentarios tampoco serían indexados, lo cual no es ideal. ¿Existe alguna forma de decirle a Google: ‘esta parte de la página es un duplicado’?

Podríamos aplicarlo al OP.

1 me gusta

Esta fue en realidad mi preocupación cuando lo discutimos. No quiero afectar el valor SEO del blog, pero tampoco quiero ocultar las preguntas y respuestas del foro, ya que a veces son tan atractivas como algunos de los artículos del blog. No estoy seguro de cómo indicarle a Google que indexe esta parte y no esa otra de una publicación.

Discourse tiene una configuración del sitio llamada embed set canonical url. Cuando está habilitada, la URL canónica para los temas incrustados se establece en la URL del contenido incrustado. ¿Esto ayudaría a mejorar el problema del contenido duplicado?

1 me gusta

Suena como si esto ayudara con el problema. ¿Tienes alguna posibilidad de conocer a alguien que esté utilizando esta función, solo para que pueda ver y compartir un ejemplo?

Otra opción aquí sería agregar “Comentarios sobre ______” al principio del título de la discusión.

1 me gusta

Esa es una cuestión complicada, porque no puedo compartir detalles sobre los sitios de nuestros clientes. Hay más información sobre este problema en este tema: Add option to set canonical_url to embed_url. He preguntado en ese tema para ver si alguien quiere proporcionar detalles sobre cómo ha afectado la activación de la configuración a su SEO.

1 me gusta

¿Es suficiente con cambiar el título? El contenido de la publicación seguiría compartiéndose.

1 me gusta

Por alguna razón, ni siquiera puedo ver la página, incluso con el bloqueador de anuncios desactivado, y me indica que debe desactivarse.

En mi experiencia, un solo párrafo de “duplicación” no es suficiente para provocar problemas de contenido duplicado, ya que usaste una captura de pantalla de mi blog :wink:

Es similar a citar un párrafo de un artículo al azar.

Hoy intenté esto colocando la URL de la página en un div oculto. El script simplemente puso el enlace en su lugar como texto. Lamentablemente, no se generó el Onebox. :frowning:

Logré que la función de incrustación capturara mis fotos de la página. El problema estaba de mi parte, ya que el código utilizaba un script de JavaScript llamado lazyload para la precarga/desvanecimiento de imágenes. Una vez que esto se eliminó, la creación de temas pudo generar cualquier imagen que configuré en el área del selector de clases. Sin embargo…

El tema se crea y funciona bien durante unos minutos. La imagen es visible al hacer clic en el zoom. Pero después de unos minutos, al actualizar, el tema cambia y, en lugar de la imagen, aparece una línea de texto de carga.

![](upload://s9ULowF5G9GnR4SQ1STdj1d9JtO.jpeg)

Parece ser un fallo al subir la imagen remotamente al servidor del foro. ¿Alguna idea de por qué fallaría? Además, si falla, ¿por qué el sistema no conserva simplemente la ubicación original de la URL? Parece extraño.

Debo añadir que este no fue un caso aislado. Ocurrió consistentemente en todos los temas que tenían la imagen inicialmente (unos 10+ temas).

[actualización: La solución para esto fue agregar mis sitios a la lista negra de sitios desde los cuales no se deben descargar imágenes. De esa manera, el HTML simplemente los toma del sitio remoto. Funciona para mí.]

1 me gusta

¿Podemos evitar la creación de nuevos temas cuando cambia la URL (para actualizaciones del título del blog)?

1 me gusta

Sí, pero tu software de blog deberá llevar un registro del ID del tema creado en la primera llamada y pasarlo como parámetro en las solicitudes de incrustación posteriores.

Consulta “Enlazar a temas existentes” en la publicación original.

3 Me gusta

No puedo incrustar mediante TypeScript en Angular. Por favor, ayúdame.

let window: any;

window.DiscourseEmbed = { discourseUrl: 'xyz.com',
  topicId: 26 };

let script = this._renderer2.createElement('script');
script.type = "text/javascript";
script.src = window.DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
script.async = true;
this._renderer2.appendChild(this._document.body, script);
1 me gusta