ホームページのリンク切れページをメール通知する

ホームページを閲覧していると、リンク切れ(リンク先のページが『見つかりません』になる)になることがあります。訪問者にとって不親切ですし、ホームページの評価が下がることにも繋がります。
そこで、自分のホームページでリンク切れがあった場合に、メール通知するようにしました。こうすることで、リンク切れが生じても素早く対応できます。

concrete5のイベント機能を活用する

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です。

 

他の記事もごらんください。

 

公開日 いいねによる獲得 投げ銭による獲得 サポーター
: : :
2019/04/07 19.87 ALIS 0.00 ALIS
mizuno@月70万PV's icon'
  • mizuno@月70万PV
  • @mizuno
月70万PVウェブメディア「計算フォーム」 https://calculator.jp/ でウェブ集客支援。書籍「WordPressユーザーのためのPHP入門」他一冊。TWITTER: @ounziw
コメントする
  • mizuno@月70万PV
  • 3ヶ月前

concrete5-japan様よりご指摘いただき、セキュリティ改善しました。ありがとうございました。

返信
コメントする