URLを変更する方法

URLが到達率に影響を与える事例

お客様より到達率の改善で相談を受けました。

改善のため検証したところ、お客様がメール文章中に使われているクリック率測定用のURLがYahoo!メールで迷惑フォルダに入ってしまう原因となっていました。

試しにGmailからお客様のURLをいれた状態で送信すると・・・

GmailからYahooへ

迷惑フォルダに入りました。

迷惑フォルダ

念のため他のアドレスからも送信

URLを変更したところ迷惑フォルダに入らないようになりました。

リダイレクト用のURLに変更して送信

受信箱に届きました

このように短縮URLやクリック測定用URLなどを使用すると、
同じドメインのURLを記載して迷惑メールを送信している方がいる場合、
問答無用で迷惑フォルダいきとなってしまいます。

特にGmailではbitly短縮URLや46mail.netなどが記載されているとブロックを受ける要因となります。

また登録フォームや解除フォームのURL
https://1lejend.com/stepmail/kd.php?no=000000
https://1lejend.com/stepmail/delf.php?no=000000
も迷惑メール判定を受けてしまう場合があります。

 

フォームのURLを記載したい場合にはリダイレクトを利用してください。

リダイレクト

あるURLから他のURLに転送させることをリダイレクトと言います。
メール文章中のURLに、他の方も使われている ドメインが含まれている方は、
ご自身で所有されているドメインのサイトからリダイレクトする方法を検討されては
いかがでしょうか。

また独自ドメインを使用できる短縮URLがあればそちらを利用することもできます。

アスメル管理画面の「各種設定」から「URL変換」を行う場合は、
方法1 .htaccessを使ったリダイレクトを設定する必要があります

 

 

方法1. .htaccessを使ったリダイレクト

URL変換」機能を使用する場合この方法になります。

登録フォームのURL
https://1lejend.com/stepmail/kd.php?no=000000
を本文中に記載したいとします。
このURLをそのまま本文中に書いてしまうと迷惑メールに入ってしまうので、
独自ドメインのURLからリダイレクトさせるように設定してみましょう。

さくらサーバーの場合はこちら
エックスサーバーの場合はこちら
ロリポップーサーバの場合はこちら

リダイレクトは「.htaccess」というファイルをサーバーに設置することで機能します。
このファイルを設置したURLにアクセスすると、ファイル中に書かれている内容の通り
URLが置き換わり、転送されるという仕組みになっています。

今回は「https://asumeru.net/example/r」にアクセスがあると
「https://1lejend.com」転送されるように設定してみます。

 

1.テキストエディタ(メモ帳)を使って下記のように書きます。

Redirect 302 /example/r/ https://1lejend.com/

下図のようにRedirectの後にメール本文に記載するURLのドメインから後の部分を
書きます。半角スペースを空けて転送先のURLを書きます。

メモ帳での作成

メモ帳での作成

記述する内容は以下のようになっています。
設置するディレクトリによって書き換えてください。

.htaccessの記述内容

※最後は必ず改行して保存してください。 改行がない場合エラーになります。

2.適当な名前を付けて保存したらサーバーにアップロードします。
設置場所
https://asumeru.net/example/r/Redirectの後に書いたURLに一致するように設置します。
※アップロードはFTPソフトやサーバーのコントロールパネルからファイルを管理している画面(ファイルマネージャーなど)で行えます。
ファイルを置いたディレクトリより下層全てに適用されるので設置場所に注意してください。

FFFTPでのアップロード

FFFTPでのアップロード

3.ファイルの名前を「.htaccess」に書き換えます。

以上で完了です。

「https://asumeru.net/example/r」から「https://1lejend.com」に
転送されるように設定されました。

例えば
https://asumeru.net/example/r/stepmail/kd.php?no=000000
をクリックすると
https://1lejend.com/stepmail/kd.php?no=000000
に転送されます。

これでメール本文中に
https://asumeru.net/example/r/stepmail/kd.php?no=000000
という形で登録フォームを記載できるようになりました。

サンプルファイルをダウンロード

Internet Server Error 500となってリダイレクト出来ない場合、
.htaccessのパーミッションを604に変更してください。
ファイルの「プロパティ」や「情報」などの項目から変更できます。

さくらサーバーやCoreserverなどでうまくいかない場合は
.htaccessの内容を以下のようにシンプルに記述してみてください。
(最後に改行が入ります)

Redirect permanent /example/r/ https://1lejend.com/

 

アスメル管理画面からURL変換に登録すると、
配信時に本文中の「http://1lejend.com」が自動変換されます。

urlconvert

URL変換

 

 

方法2. HTMLを使ったリダイレクト

メールに記載したいURLが少ない場合は、以下のように、 リダイレクト用のHTMLページを設置する方法をとることもできます。

ana4

リダイレクト用のHTML

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=表示させたいページのURL">
</head>
<body>
</body>
</html>

 

方法3. PHPを使ったリダイレクト

PHPを使ってリダイレクトを行うことができます。
この方法ではHTMLの場合と違い、URLのパラメータを残すことができますので、
ワンクリック解除の配信解除URLにも適用することができます。

以下はワンクリック解除の配信解除URLの場合の例です。
このファイルをサーバーにアップロードしてアクセスすると
URLパラメータを残したままリダイレクトされます。

<?php
// セキュリティヘッダーの設定
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: DENY');
header('X-XSS-Protection: 1; mode=block');

// 許可されたドメインのホワイトリスト
$allowed_domains = [
    '1lejend.com'
];

// デフォルトのリダイレクト先(フォールバック)
$default_redirect = 'https://1lejend.com/';

// ベースURL(固定)
$base_url = 'https://1lejend.com/d.php';

/**
 * クエリ文字列をサニタイズする関数
 */
function sanitize_query_string($query_string) {
    if (empty($query_string)) {
        return '';
    }
    
    // 危険な文字をフィルタリング
    $dangerous_chars = ['\r', '\n', '\0', '%0a', '%0d', '%00'];
    $query_string = str_ireplace($dangerous_chars, '', $query_string);
    
    // URLエンコードされた改行文字も除去
    $query_string = preg_replace('/(%0[ad]|%00)/i', '', $query_string);
    
    // 長さの制限(2048文字まで)
    if (strlen($query_string) > 2048) {
        return '';
    }
    
    return $query_string;
}

/**
 * ドメインが許可されているかチェックする関数
 */
function is_allowed_domain($url, $allowed_domains) {
    $parsed_url = parse_url($url);
    
    if (!$parsed_url || !isset($parsed_url['host'])) {
        return false;
    }
    
    $host = strtolower($parsed_url['host']);
    
    // www.を除去
    $host = preg_replace('/^www\./', '', $host);
    
    return in_array($host, $allowed_domains, true);
}

/**
 * HTTPSを強制する関数
 */
function force_https($url) {
    $parsed_url = parse_url($url);
    
    if (!$parsed_url) {
        return false;
    }
    
    // HTTPSに変更
    $parsed_url['scheme'] = 'https';
    
    // URLを再構築
    $secure_url = $parsed_url['scheme'] . '://';
    
    if (isset($parsed_url['host'])) {
        $secure_url .= $parsed_url['host'];
    }
    
    if (isset($parsed_url['port']) && $parsed_url['port'] != 443) {
        $secure_url .= ':' . $parsed_url['port'];
    }
    
    if (isset($parsed_url['path'])) {
        $secure_url .= $parsed_url['path'];
    }
    
    if (isset($parsed_url['query'])) {
        $secure_url .= '?' . $parsed_url['query'];
    }
    
    return $secure_url;
}

// メイン処理
try {
    // クエリ文字列の取得とサニタイズ
    $query_string = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : '';
    $sanitized_query = sanitize_query_string($query_string);
    
    // リダイレクト先URLの構築
    if (!empty($sanitized_query)) {
        $redirect_url = $base_url . '?' . $sanitized_query;
    } else {
        $redirect_url = $base_url;
    }
    
    // HTTPSを強制
    $secure_url = force_https($redirect_url);
    
    if (!$secure_url) {
        throw new Exception('Invalid URL format');
    }
    
    // ドメインの検証
    if (!is_allowed_domain($secure_url, $allowed_domains)) {
        throw new Exception('Domain not allowed');
    }
    

    
    // リダイレクト実行(302 Found)
    header('Location: ' . $secure_url, true, 302);
    exit();
    
} catch (Exception $e) {
    // エラーログに記録
    error_log("Redirect error: " . $e->getMessage() . " from IP: " . $_SERVER['REMOTE_ADDR']);
    
    // デフォルトURLにリダイレクト
    header('Location: ' . $default_redirect, true, 302);
    exit();
}

サンプルファイルをダウンロード

【使用方法】
1.サンプルファイルをダウンロードする
2.解凍後、ご利用のレンタルサーバーにアップロードする
3.アップロードしたファイルへのURLに「?t=###tourokuid###&m=###mail###」を付加して解除URLとして記載する

ファイルを「https://asumeru.net/optout.php」としてアップロードすると、
「https://asumeru.net/optout.php?t=###tourokuid###&m=###mail###」を
配信解除URLとして使用できるようになります。

コメント