レンタルサーバー選びの迷いを解決!全力サポートします

Google or AdMax Promotion (srv)

サイトマップ(XML)にスタイル(XSLT)指定する場合の注意点

検索エンジンに対してサイトマップを利用してインデックス要求をするだけであれば、
サイトマップの仕様に従ってXMLを出力するだけなのですが、
作成したサイトマップを自分の確認用にHTMLとして整形して表示したい。
そう思うと、いきなり面倒なパターンにハマります。
ここではサイトマップ作成における注意点というかポイントをご紹介しておきます。

サイトマップの仕様とサンプル

サイトマップは以下のような形式で出力する単なるXMLファイルです。

サイトマップインデックス

サイトマップ

 

サイトマップの仕様等は、以下のサイトマッププロトコルに則って作成する事になっています。

標準のサイトマップ プロトコル

 

プロモーション

Google or AdMax Promotion (srvpos)

ルート要素に名前空間の宣言は必須(Googleが食べない)

サイトマップ/サイトマップインデックスを検索エンジンへ登録依頼する前に、
Webで表示確認ができるようにと試行錯誤をしていて、
どうしてもXSLT(スタイルシート)の割り当てができず困りました。

その一番のポイントが以下の記述に起因しています。

サイトマップインデックスの場合は、ルート要素を以下のように書きます。

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

またサイトマップの場合も同様に以下のように書きます。

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

どちらも「xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"」と、
デフォルトネームスペース(xmlns="~")の記載があり、
このXMLの名前空間の定義がされています。

Googleではこの名前空間の定義が無い場合、
サイトマップの要求は受け付けてくれますが、画面にエラーが表示されます。

問題 説明
エラー 誤ったネームスペース サイトマップまたはサイトマップ インデックス ファイルのネームスペース宣言が不適切です。

サイトマップにXSLTスタイルシートが割り当てられない・・・と悩み、
デフォルトネームスペースを消すと、後からエラーを目にする事になります。

 

ルート要素の名前空間宣言に別名を付けるとNG(Googleが食べない)

ルート要素にデフォルトネームスペースが割り当てられていて、
接頭辞(別名)を付けておけば、スタイルシート側で処理がしやすいのではないかと、
XML側に接頭辞を付けても、同様にエラーになります。

<sitemapindex xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9">
<urlset xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9">

 

XML側は基本仕様のまま触らず、表示に関してはすべてXSLT側で定義します。

XML側に接頭辞を付ける必要はありません。

 

XSLスタイルシート上で値参照には別名を活用する

個人的には「接頭辞」を付けずにXSLT側でXMLの値の取得がしたかったのですが、
現時点ではその方法が見つかっていません。

以下の記載方法をすれば、
Googleが受け付けるXMLに対してのXSLTスタイルシートの割り当てが可能です。

 

PHPからXML出力する前にヘッダーの送出を行う

サイトマップをファイルではなくURLの要求に合せて、
PHPなどで出力するような場合、以下のように私はしています。

実際にはURLリライトを行って、.xml形式でURLを認識するようにしています。

.htaccessに以下のように記載します。
RewriteRule ^sm_demo/sitmap_index.xml$ /sm_demo/sitemap_idx.php [L]

以下のURLにアクセスすれば、上記のphpが呼び出され、処理されます。

 

さて、このphpの中身は以下のようになっていますが、

ポイントとしては「 header('Content-Type: text/xml');」部分で、
PHPからXML出力を行う「echo $xml->asXML();」の前に、
HTMLヘッダーの送出を行っています。

 

実際、このヘッダー出力の1行をコメントアウトすると、
以下のようにスタイルが全く割り当てられていない状態の表示になってしまいます。

XMLに対してスタイルシートが割り当てられない・・・と悩んだ際には、
確認されるといいかもしれません。

尚、このPHPファイルについては以下の記事でご紹介したものになります。

 

編集・確認を効率的にするために

XMLとXSLTの表示確認をする際に、ローカル環境にApacheが動作している場合はいいのですが、
サーバー上にアップロードしては表示確認を繰り返すのは苦痛です。

そんな時はWebサービス上でスタイルの確認をしながら双方を編集し確認すると便利です。

 


AdMax Promotion

公開日:

コンテンツナビ
すべて展開 | すべて省略

AdMax Promotion

カテゴリ
すべて展開 | すべて省略

QRコードからもこのURLを開けます。