サイト制作やSEO対策を行う上で、設定することは基本中の基本とされるタイトル、ディスクリプション、キーワード、etc...
総括して、いわゆるメタタグ。
普通だったら、ファイルを一つずつ開き書き込んでいくという、少し面倒な工程があるかと思います。
ファイルが多いほど大変になります。
そんなタイトル、ディスクリプション、キーワードを、Xmlファイル一つで前ページ分、一元管理できる機能があったら、
作業は相当楽になるのではないでしょうか?
今日はそんな機能を実装できるPHPクラスをご紹介します。
この仕組みを実装することができれば、少なくとも、
- 各ページをわざわざ開く
- 各ページをわざわざアップする
などの作業が減るため、作業の手間を省き時間を短縮したり、
ファイルのアップ漏れを防ぐことができます。
メタタグ設定用Xmlファイル
メタタグ設定用Xmlファイルは、実際に使用するときは下記のようになります。
<?xml version="1.0" encoding="utf-8"?>
<meta>
<default>
<title>デフォルトタイトル</title>
<description>デフォルトディスクリプション</description>
<keyword>デフォルトキーワード</keyword>
<noindex>false</noindex>
</default>
<under>
<index.php>
<title>under indexタイトル</title>
<description>under indexディスクリプション</description>
<keyword>under indexキーワード</keyword>
<noindex>true</noindex>
</index.php>
<detail.php>
<title>under detailタイトル</title>
<description>under detailディスクリプション</description>
<keyword>under detailキーワード</keyword>
<noindex>false</noindex>
</detail.php>
</under>
</meta>
<default></default> の中身は、メタタグが設定されていないページへ適用するデフォルトのメタタグ。
その他は、ディレクトリ → ファイル名 → 各メタタグ の順になっています。
ディレクトリが2階層、3階層になっている場合は、さらに入れ子にします。
今回は、タイトル、ディスクリプション、キーワード、noindex を設定できるよう書き込んでいます。
| タグ | 内容 |
|---|
| <title></title> | ページのタイトル |
| <description></description> | ページの説明文(ディスクリプション) |
| <keyword></keyword> | ページのキーワード |
| <noindex></noindex> | noindexの設定(falseで検索結果へのインデックスを許可) |
XmlをJSONへ変換するクラス
次に、Xmlファイルで設定された各メタタグを抽出し、
Jsonファイルへ変換するクラスを呼び出します。
class Xml {
function Xml($path) {
$xml = simplexml_load_file($path);
$json = json_encode($xml);
$this->val = json_decode($json,TRUE);
return;
}
}
JSONから各メタタグ用変数へ値を格納
JSONファイルを foreach() で回し、各メタタグ用変数へ値を格納してゆきます。
GetDir() クラスについてはこちらをご参照ください。
class Meta {
public $set;
function Meta() {
$this->meta = new Xml("XMLファイルへのパス");
$dir = new GetDir();
$this->set = $this->meta->val;
$this->MetaExtra($dir->script);
$this->MetaSet();
return;
}
function MetaExtra($dir) {
foreach($dir as $val) {
if($this->set[$val]) {
$this->set = $this->set[$val];
$this->MetaExtra($dir);
} else {
break;
}
}
return;
}
function MetaSet() {
if($this->set["title"]) {
$this->title = $this->set["title"];
} else {
$this->title = $this->meta->val["default"]["title"];
}
if($this->set["description"]) {
$this->description = $this->set["description"];
} else {
$this->description = $this->meta->val["default"]["description"];
}
if($this->set["keyword"]) {
$this->keyword = $this->set["keyword"];
} else {
$this->keyword = $this->meta->val["default"]["keyword"];
}
if($this->set["noindex"]) {
if($this->set["noindex"]==="false") {
$this->noindex = false;
} else {
$this->noindex = true;
}
} else {
$this->noindex = false;
}
return;
}
}
ヘッダータグへ使用する
変数に値を格納できたので、あとはHTML側でクラスをコンストラクトし使用するだけです。
<head>
<title><?php echo $construct->meta->title; ?><title>
<meta name="description" itemprop="description" content="<?php echo $construct->meta->description; ?>" />
<meta name="keywords" content="<?php echo $construct->meta->keyword; ?>">
<meta name="robots" content="<?php if($construct->meta->noindex) { ?>noindex<?php } else { ?>index<?php } ?>">
</head>
以上で実装完了です。
なぜ、わざわざXMLからJSONファイルへ変換したかというと、
XmlクラスをMetaクラス依存のクラスではなく、
JSONへ変換するクラスという独立したクラスにすることで汎用性を高めるためです。
こちらのクラスはメタタグ出力以外にも利用できます。