エスケープされていないスクリプトタグとコンテンツをページに追加するにはどうすればよいですか?


7

JSON-LDの構造化データをページに追加したい(https://developers.google.com/search/docs/guides/intro-structured-data

基本的に、私がする必要があるのは、HTMLのどこかに追加することです。たとえば、基本的なページ、次のようなスニペットを考えてみましょう。

<script type="application/ld+json">
{  "@context":"http://schema.org",
   "@type":"WebSite",
   "name":"Site name",
   "alternateName":"Site alternatime name",
   "description":"Site description",
   "keywords":"list of keyword",
   "inLanguage":"en",
   "url":"http://www.example.eu/en",
   "potentialAction":{
   "@type":"SearchAction",
   "target":"http://www.example.com/en/find/{search_term_string}",
   "query-input":"required name=search_term_string"
   }
}
</script>

完全なHTML入力を使用しようとしましたが、スニペットはCDATAで(一種)エスケープされ、Googleはそれを解析できません。

では、エスケープせずにそのスニペットを提供するにはどうすればよいですか?


Drupal 8がRDFa(JSON-LDの代替)をサポートしていることをご存知ですか?たとえば、rdfuiを
1

1
Drupal Answersへようこそ!より具体的な質問がありますか?提案はありませんか?このサイトは提案用ではありませんが、明確な回答で明確な質問に答えるためのものです。
kiamlaluno

私の具体的な質問は、上記のスニペットをページのHTML(基本ページとしましょう)に追加する必要があることです。私は完全なHTML入力を使用しようとしましたが、スニペットはCDATAで(一種の)エスケープされ、Googleはそれを解析できません。では、エスケープせずにそのスニペットを提供するにはどうすればよいですか?
user3535189 2017年

ある意味、RDFaはWebサイトに関するセマンティックメタデータを提供する古い方法であり、JSON-LD構造化データに置き換えられると思います。ここで見ることができるように、GoogleはJSON-LDを推進しています:developer.google.com/search/docs/guides/intro-structured-da‌ ta。
user3535189 2017年

1
D8 JSON-LD(D8コア)のサンドボックスモジュールがあります。これはサンドボックスプロジェクトであるため、適切にテストされていないため、本番環境で使用することはお勧めできません。しかし、それを見て、それが機能する場合はローカルで試すことができます。ここからモジュールコードをダウンロードできます。作業に興味がある場合は、モジュールの所有者にメンテナとして追加してもらい、作業を続けてモジュールを完全で安定したものにすることもできます。
Yogesh 2017年

回答:


3

これは、追加のモジュールを必要とせずにこれを行う簡単な方法です。この例のために、このフィールドをインストールプロファイルにBasic page付属するコンテンツタイプに追加しStandardます。

まず、新しいテキスト形式を作成しましょう。に移動してadmin/config/content/formatsをクリックしますAdd text format。テキスト形式にJSON-LDという名前を付け、管理者のみが使用できるようにします。次のように、すべてのオプションを空白のままにしてに設定Text editorNoneてください。

ステップ1

次に、Basic pageコンテンツタイプに新しいフィールドを追加しましょう。に移動しadmin/structure/types/manage/page/fields/add-fieldて選択しますText (formatted, long)。フィールドにJSON-LDという自動マシン名を付けfield_json_ldます。

ステップ2

次に、フィールドのラベルを非表示にします。次のように移動してadmin/structure/types/manage/page/display、Labelを新しいJSON-LDフィールドに設定します- Hidden -

ステップ3

次に、スクリプトを新しいページに追加します。に移動しnode/add/pageて、タイトルと本文を自由に入力します。ここに重要なビットがあります:JSON-LD textareaの場合、次のように必ずJSON-LDに設定しText formatてください:

ステップ4

次にをクリックしますSave and publish。ノードは次のようになります。

手順5

特別なことはありませんか?次に、ソースコードを見てみましょう。

手順6

ビンゴ!


こんにちは、ここでは少し混乱しています。まず、このスクリプトの目的を理解しましょう。そのコンテンツとJSON-LDの単語から、検索エンジンボートで検出する必要があるようです。したがって、サイトの<head> </ head>セクションに存在する必要があります。私が間違っていたら訂正してください。ありがとう
CodeNext

@CodeNext:はい、headタグ内にある必要があります。でも、体の中に入れてもグーグルが読んでいるのに気づきました。headタグにカスタムHTMLを挿入する方法はありますか?
user3535189 2017

@ user3535189その部分を追加する方法が必要な場合は、ここの私の回答を参照してください。<head> </ head>にコードを追加するすべての方法をコンパイルしました。お役に立てば幸いです。
CodeNext

@CodeNext提案ありがとうございます。ウェブサイト全体のメタタグのようなものに適しています。しかし、私はより賢明な方法を探していました。つまり、20ページある場合、各ページには異なる「JSON-LD」スニペットが必要です。。私はおそらくその後、身体『タグ「の代わりにHEAD2』に配置されたヴィムによって説明1、などのテキストフィールドが必要ですので、
user3535189

@ user3535189、うーん、その場合、これは適切な方法です。Googleがこの方法でこのスニペットを識別している場合は、ライブサイトでテストした後にお知らせください。もしあなたが答えとして受け入れているなら、私はこの答えへの報奨金を報奨する必要があります。Thx
CodeNext

1

デフォルトのフルHTML形式は、独自のテキストフィルタリングを実行するCKEditorを使用しており、問題の原因となっている可能性があります。CKEditorのAdvanced Content Filterを無効にすることもできますが、私が推奨するのは、フィルタリングやテキストエディターを使用しない新しいテキスト形式を作成することです。次に、ページのコンテンツタイプの新しいロングテキストフィールドを作成し、新しいテキスト形式をデフォルトとして設定します。

新しいフィールドに必要なスクリプトを貼り付けることができるはずです。


-2

スクリプトをエディターに追加する場合は、完全なhtmlではなくPHPコードフィルターを使用し(drupal 8のPHPモジュール)、スニペットを追加します。正常に動作します。問題が解決することを願っています。添付のスクリーンショットを参照してください:

ここに画像の説明を入力してください ここに画像の説明を入力してください


これは方法かもしれませんが、私はWimの答えの方が良いと思います。
user3535189 2017

はい確かですが、この方法では、新しいテキスト形式を追加する必要はありません。
Karuna

-3

使用する :

<pre> <code> your codes here </code> </pre>

これは、すべてのサイトがHTMLで任意のタイプのコードをレンダリングする方法です。

そしてこのようにコードタグにコードを書いて、コードがエスケープしないと思います。


2
Swing、but a miss :) OPはスクリプトをpreタグで表示するのではなく、DrupalがXSSフィルタリングを実行せずに通常のページにスクリプトを挿入することを望んでいます
Clive
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.