PHPを使って英語と日本語のページ同士を自動リンク

英語のページを作ったら、日本語のページと英語の該当ページとを相互にリンクさせてみましょう。そうすれば、使い勝手が良くなるし、SEO上も有利になると思います。これをPHPを使って自動的に行わせてみました。

日本語ページと英語ページのディレクトリ配置

サーバーの写真

英語のページを作る時、後でわかりやすく、使い勝手が良いように、ディレクトリ配置を考えて作りました。つまり英語ページのURLは、日本語ページのドメインのすぐ後ろに「en/」を追加したものとしました。

単純に リンク楽天 を作成するだけなら、日本語ページにそのページを英語にしたページへのリンクを作成したり、その逆に英語のページにそのページと内容が同じ日本語のページへのリンクを作成するだけです。これでは、各ページをその都度変更しなければならず、手間が大変です。

そこで、PHPを使ってサイド部分に共通で使えるリンクを作成することにしました。なお、このサイド部は外部ファイルにしてPHPインクルードしています。

日本語ページに同一内容の英語ページへのリンクを設定する

次のように、日本語ページにそのページと同一内容の英語ページへのリンクを設定すると同時に、もし同一内容の英語ページがサーバー上に存在しなかったら、その日本語ページを英語にウェブ翻訳するページへのリンクをも設定しました。

<?php
$en_name='/en'.$rq_uri;
$en_name1='/en'.$_SERVER['SCRIPT_NAME'];
if (file_exists('..'.$en_name1) or file_exists('.'.$en_name1)) {
echo "<a href=\"${en_name}\" title=\"このページと同一内容の英語ページ\">English version</a>";
} else {
echo "<a href=\"//translate.google.com/translate?hl=en&amp;sl=ja&amp;tl=en&amp;u=https://hogehoge.jp${rq_uri}\" title=\"このページを英語に翻訳\" rel=\"nofollow\" target=\"_blank\">Translate English</a>";
} ?>

$rq_uri の部分について説明すると、$_SERVER['REQUEST_URI']部分はURL部の後半(/***/example.php等)を表しています。ファイル名がindex.phpの場合は、index.phpが除かれています。そこで、この部分を変更し正規表現を使って、次のように「?」以降のパラメータなどを取り除いたものを使いました。

<?php $rq_uri = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); ?>

また、 $_SERVER['SCRIPT_NAME'] は、そのページのURLからドメイン名までを削除したものです。つまり、URLが http://hogehoge.jp/abc/nihongo.php なら /abc/nihongo.php となります。

英語のURLにするにはこれに、 /en を追加してやります。

英語ページに同一内容の日本語ページへのリンクを設定する

英語ページからそのページと同一内容の日本語のページへのリンクを設定しました。該当ファイルがサーバー上に存在していれば、そのページへのリンクを表示するようにしました。もしファイルが存在しなければ何もしません。

<?php
$p_name=substr($rq_uri,3);
$p_name1=substr($_SERVER['SCRIPT_NAME'],3);
if (file_exists('..'.$p_name1)) {
echo "<a href=\"${p_name}\" title=\"Japanese Page of the same contents\">Japanese version</a>\n";
} ?>

ここで、 substr() の機能を使って、 $_SERVER['SCRIPT_NAME'] から /en を取り除いています。そして、ひとつ上のディレクトリーに上がってファイルが存在するかどうかを確認しています。

PHPの substr() 機能

substr() の機能は文字列の一部分を取り出すことです。

substr(string, start, [length])

substr() は文字列 string の、start で指定した位置から length バイト分の文字列を取り出して返します。 start が正の場合、取り出される文字列は、 string の 0 から数えて start番目から始まる文字列となります。

start が負の場合、取り出される文字列は、 stringの後ろから数えて start番目から始まる文字列となります。

英語と日本語のページ同士の自動リンク結果

日本語ページから英語ページへの移動とその逆の移動はとても便利です。SEOでも日本語で人気のあるページは英語でも人気のあるページになるはずです。