Javascript経由で別のウェブサイトにDiscourseコメントを埋め込む

Discourse では、あなたのユースケースは標準ではサポートされておらず、カスタム開発が必要です。プラグイン開発を検討するか、実装を支援してくれるコンサルタントを雇うことをお勧めします。

「いいね!」 2

トラブルシューティングに、Discourse がページやブログ記事の内容を解析して新しいスレッドを作成できない場合、埋め込みが失敗する(その旨のヒントも表示されない)ことを追加してください。まず特定のトピックを埋め込み、その後、ページの解析に使用するオプションを試してみてください。

「いいね!」 3

素晴らしいですね!ただ一つだけ困っている点がありまして、meta-description を最初の投稿として取得するために、正しい CSS セレクタの使い方がわからないのです。
以下のような試行錯誤を何度か繰り返しましたが、何かご提案はありますでしょうか?

「いいね!」 1

サイトの head セクションにある meta タグの内容を取得しようとしているのであれば、それは不可能だと思います。

「いいね!」 2

提供された埋め込みリンクに対して、テキストや画像のより高度なインポートを行うのではなく、単一のボックスで表示してくれないかともどかしさを感じています。

複雑なページデータやレイアウトを持つサイトにおいて、トピックを議論のプレースホルダーとするだけでなく、記事やストーリーがあるリモートサイトへの案内手段としても機能するシナリオは、誰かが既に考えたはずではないでしょうか?

お願いできますか? :slight_smile:

「いいね!」 3

そこで、当社のメインサイトのブログや記事の一部にこれを実装し、フォーラムを活用することを検討しています。今朝の会議で、マーケティング担当者が「これは悪いアイデアだ」と指摘しました。フォーラムで投稿される各投稿は、タイトルが同じで最初の段落も同じであるため、ブログのコンテンツと重複して見えるというのです。彼は、その例をグーグル検索で示しました。これらが重複ではないことをグーグルに示すための組み込み機能はありますか?あるいは、これらの投稿に「no index」を設定することは可能でしょうか?

「いいね!」 4

ふむ、それは興味深いですね。noindex を追加すると、コメントもインデックスされなくなってしまうため、望ましくありません。Google に「このページのこの部分は重複です」と伝える方法はありませんか?

それを元の投稿(OP)に適用することもできます。

「いいね!」 1

これは以前議論した際、実際に私が懸念していた点です。ブログのSEO価値を損なうことは避けたい一方で、フォーラムのQ&Aを隠すことも望みません。なぜなら、Q&Aは場合によってはブログ記事と同じくらい魅力的だからです。Googleに投稿の一部のみをインデックス登録させ、他の部分は除外させる方法が思いつきません。

Discourse には「埋め込みコンテンツの正規 URL を設定する」というサイト設定があります。これを有効にすると、埋め込まれたトピックの正規 URL が埋め込まれたコンテンツの URL に設定されます。これにより、重複コンテンツの問題が改善されるでしょうか?

「いいね!」 1

それはおそらく問題の解決に役立ちそうですね。この機能を使っている方をご存じでしたら、例を見せていただけないでしょうか?

別の選択肢として、ディスカッションのタイトル先頭に「______に関するコメント」を追加することもできます。

「いいね!」 1

それは難しいご質問ですね。当社の顧客サイトの詳細を共有できないためです。この問題については、以下のトピックにさらに詳しい情報が記載されています:https://meta.discourse.org/t/add-option-to-set-canonical-url-to-embed-url/103915。そのトピックで、設定を有効にすることで SEO にどのような影響が出たかについて、情報提供してくれる方がいるか尋ねています。

「いいね!」 1

タイトルを変更するだけで十分でしょうか?投稿内容は引き続き共有されます。

「いいね!」 1

なぜか Adblock を無効にしても、そのページすら表示できません。

私の経験では、重複コンテンツの問題を引き起こすには、「重複」の単一の段落では不十分です。ブログからのスクリーンショットを使用しましたのでね :wink:

これは、ランダムな記事から段落を引用するのと似ています。

今日は、ページ URL を非表示の div に配置して試してみましたが、スクリプトはリンクを単なるテキストとして挿入するだけで、ワンボックス化にはなりませんでした。残念です。:frowning:

埋め込み機能でページから写真を取得できるようになりました。問題は私側にあり、コードが「lazyload」と呼ばれる画像のプリロード/フェードイン用 JavaScript を使用していたことが原因でした。これを削除したところ、クラスセレクター領域で設定した任意の画像をトピック作成時に正常に生成できるようになりました。しかし……

トピックは作成され、数分間は正常に動作します。画像はズームクリックで表示可能です。ところが数分後にページを更新すると、トピックの内容が変化し、画像の代わりに「upload」というテキスト行が表示されてしまいます。

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

どうやら、画像がフォーラムサーバーへのリモートアップロードに失敗しているようです。なぜ失敗するのでしょうか?また、もし失敗する場合、なぜシステムは元の URL 場所を保持しないのでしょうか?不自然に思えます。

付け加えると、これは孤立した事例ではありませんでした。最初に画像が表示されていたすべてのトピック(10 件以上)で同様に発生しました。

[更新:この問題に対する回避策は、画像をダウンロードしないサイトのブラックリストに自サイトを追加することでした。これにより、HTML はリモートサイトから直接画像を取得するようになります。これで私の場合は問題なく動作しています。]

「いいね!」 1

URL が変更された際(ブログタイトルの更新時など)、新しいトピックの作成を防止することはできますか?

「いいね!」 1

はい、ただしブログソフトウェア側で、最初の呼び出し時に作成されたトピック ID を追跡し、その後の埋め込みリクエストでパラメータとして渡す必要があります。

OP の「既存のトピックへのリンク」をご覧ください。

「いいね!」 3

TypeScript を使用して Angular で埋め込めません。お手伝いください。

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