オブジェクト索引
Channel オブジェクトは、コンテンツ配信先を表すオブジェクトです。
展開やメソッド中で channel() 関数を使用すると、その展開処理の対象となっている Channel オブジェクトが得られます。得られた Channel オブジェクトを通してチャネルの属性を調べることで、そのチャネルに応じたコンテンツを生成することができます。
メソッド名 | 説明 |
---|---|
channelName() | チャネル名を返す |
displayName() | チャネル表示名を返す |
isPrimary() | プライマリチャネルであるかを判定する |
channelName() メソッドは、チャネルの名称を返します。返される名前は「チャネル設定」画面の「チャネル名」欄に指定してある名前です。
テンプレートの展開やメソッド内で、処理中のチャネルの名前を参照し、そのチャネルに適したコンテンツを生成します。
<body>
........
<wr-if condition="channel().channelName() == \"tablet\"">
........
タブレットデバイス向けの展開
........
</wr-if>
<wr-if condition="channel().channelName() == \"mobile\"">
........
モバイルデバイス(スマートフォン)向けの展開
........
</wr-if>
........
</body>
展開中で channel().channelName() という式を書くのと、channelName() 関数を呼び出すのとは同じ結果になります。
displayName() メソッドは、チャネルの名称を返します。返される名前は「チャネル設定」画面の「チャネル表示名」欄に指定してある名前です。
テンプレートの展開やメソッド内で、処理中のチャネルの表示名を参照しコンテンツ内で使用します。
<head>
........
<title>%pageTitle()% | %channel().displayName()%</title>
........
</head>
この例では、ページのタイトルにチャネルの表示名を埋め込み、ユーザがどのチャネル(デバイス)向けのコンテンツを閲覧しているかがわかるようにしています。
チャネルの表示名には、それぞれのチャネルで「PC版」や「モバイル版」といった、チャネルが想定しているデバイスのクラスを示す名前が指定されているものとします。
表示名には任意の文字列を指定できます。表示名の使い方は自由ですが、表示名にはコンテンツ中で使用するための名前を指定しておくとよいでしょう。
isPrimary() メソッドは、そのチャネルがプライマリである場合に true を返します。ひとつのサイトには複数のチャネルを定義することができますが、その中に、必ずひとつだけ、プライマリチャネルがあります。
プライマリチャネルは、デフォルトのチャネルでもあります。Web Server にアクセスしてきたユーザのブラウザの User-Agent から、どのチャネルのコンテンツをリプライすべきかを判断し、デバイスに応じたコンテンツを提供することができますが、User-Agent からチャネルを決定するルールのいずれにも該当しないブラウザに対しては、プライマリチャネルのコンテンツが返送されます。
プライマリではないチャネルのコンテンツを生成する場合に、head 節に link rel="canonical" を宣言し、検索エンジン等に対して、インデクシングすべきオリジナルのページの URL を供給してみます。
<head>
........
<wr-if condition="channel().isPrimary() != true">
<link rel="canonical" href="%thisPage().canonicalURL()%"/>
</wr-if>
........
</head>
channel() 関数で処理中の Channel オブジェクトを取得し、取得した Channel オブジェクトに対して isPrimary() メソッドを呼び出してチャネルがプライマリかどうかを調べます。チャネルがプライマリではない場合には、そのページの canonicalURL として、対応するプライマリチャネルのページの URL を canonical として宣言します。
複数のチャネルを定義し、各種のデバイスに最適化されたコンテンツを配信している状況では、複数のコンテンツのセットが、いわゆる「重複コンテンツ」を形成しています。つまり、コンテンツとしてはほぼ同じ内容であるにもかかわらず、形式(マークアップなど)の細部が異なる、複数のコンテンツのセットがネット上に公開されている状態になっているわけです。
検索エンジン等に対しては、複数のコンテンツセットのうちのひとつを canonical であると宣言し、そのコンテンツについてインデクシングを行うよう促しておくと良いでしょう。
プライマリチャネルを canonical としておけば、検索エンジン経由で様々なデバイスからのアクセスを受けた場合でも、最初のアクセスをプライマリチャネルで受け取ることでチャネル判定ルールが動作し、アクセスしてきたデバイスに最適なチャネルのコンテンツを配信することができます。