ホームページを閲覧していると、リンク切れ(リンク先のページが『見つかりません』になる)になることがあります。訪問者にとって不親切ですし、ホームページの評価が下がることにも繋がります。
そこで、自分のホームページでリンク切れがあった場合に、メール通知するようにしました。こうすることで、リンク切れが生じても素早く対応できます。
concrete5のフォームで自動返信でも使った、イベント機能を活用します。(イベントはconcrete5の用語で、プログラム実行の途中で、追加の処理を行うものです。WordPress のアクションフックに似た働きです。)
今回は、on_page_not_foundというイベントを使います。on_page_not_foundは、リクエストされたページが見つからなかったに発火するイベントです。このイベントにメール送信スクリプトを追加すると、
ページが見つからなかった
⇒on_page_not_foundイベントが発火する
⇒⇒on_page_not_foundイベントに追加されているメール送信スクリプトが実行される
となります。
<?php // MIT Licence (C) 2019 Fumito MIZUNO
namespace Concrete\Package\OunziwPageNotFoundNotify;
use Concrete\Core\Package\Package;
use Concrete\Core\Support\Facade\Events;
class Controller extends Package {
protected $pkgHandle = 'ounziw_page_not_found_notify';
protected $appVersionRequired = '8.4';
protected $pkgVersion = '0.7';
public function getPackageDescription()
{
return t("on_page_not_found");
}
public function getPackageName()
{
return t("on_page_not_found");
}
public function on_start()
{
Events::addListener('on_page_not_found', function() {
$mh = $this->app->make('mail');
$sh = $this->app->make('helper/security');
$mh->setSubject('リンク切れ報告');
$to_email = 'mizuno@calculator.jp';
$from_email = 'info@calculator.jp';
$mailbody = 'リクエストされたページ' . PHP_EOL;
$mailbody .= $sh->sanitizeURL($_SERVER['REQUEST_URI']);
$mailbody .= PHP_EOL;
$mailbody .= 'リンク元のページ' . PHP_EOL;
$mailbody .= $sh->sanitizeURL($_SERVER['HTTP_REFERER']);
$mailbody .= PHP_EOL;
$mh->to($to_email);
$mh->from($from_email);
$mh->setBody($mailbody);
$mh->sendMail();
});
}
}
上のようなコードを、packages/ounziw_page_not_found_notify/controller.php に書き込みます。(フォルダ・ファイルは必要に応じて作成しておきます)
$to_emailと$from_emailは、適宜変更してください。
コードはMITライセンスで公開しますので、誰でも無償で利用できます。商用利用(例:ウェブ制作会社などで顧客への提供)もOKです。