私のUTMコードがページのロードを劇的に遅くしていた問題を見つけて修正しました。問題は、主人公が?
であったことでした。解決策は、それを#
に変更することでした。現在、文字通り何百ものキャンペーンがあり、先頭に?
があり、それらを手動で変更すると永遠にかかります。
リクエストの受信時に?
を#
に変更して、ページの読み込みの問題を回避することは可能ですか?
Rewrite URLを使用してそれを行う何らかの方法があるはずです。
そうでない場合、ハッシュタグが2未満であるにもかかわらず、地球上でダンの疑問符が20秒のページロードを引き起こす理由を誰でも助けることができますか?
たとえば、次のロード時間は15〜20秒です。
http://example.com/?utm_source=df_intermediate&utm_medium=email&utm_campaign=test
一方、次のロード時間は2〜4秒です。
http://example.com/#utm_source=df_intermediate&utm_medium=email&utm_campaign=test
これは、サイトのサーバー側のキャッシュの問題のようです。 (おそらく、キャッシュキーを生成するときにクエリ文字列を削除する必要がありますか?)
問題は、UTMコードだけでなく、anyクエリ文字列にあります。任意のURLに?hello=world
を追加すると、最初の(キャッシュされていない)リクエストの読み込み時間が長くなります(20秒以上)。ただし、同じURLを再度要求すると、後続の応答は2+秒になります。これは、ローカルブラウザーキャッシュが無効の場合です。
?
を#
に変更することにより、クエリ文字列をフラグメント識別子に変更します。フラグメント識別子はサーバーに送信されないため、サーバー側のキャッシュに干渉しません。
おそらく、外部リダイレクトクエリ文字列のURLからフラグメントIDを持つURLへ、.htaccessのようなものになります:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(utm_source=.*)
RewriteRule (.*) /$1#%1 [QSD,NE,R=302,L]
これには、QSD
フラグ(クエリ文字列を削除する)にApache 2.4が必要です。 NE
フラグは、特殊文字(#
)でURLに書き換えているため、必須です-パーセントエンコードされないようにするため。
ただし、これは根本的な問題を隠しているだけであり、将来さらに多くの問題が発生する可能性があります。
#
の代わりに?
を使用するほうが悪いと思います。
標準URLでは、#
の後の部分は通常、ページ上のタグを意味し、タグはID値から定義されます。または、古風な場合は<a name='tagnamehere'>
を使用します。
ページが主に静的である場合(URLのコンテンツはURLに誰がアクセスするか、何にアクセスするかに関係なく同じ場合)、サーバーにページをキャッシュする必要があります。次に、ページの準備中にキャッシュファイルが作成されますが、ページの2回目以降のロードでは、すべてのデータベース処理やその他のサーバーCPUの動作ではなくキャッシュファイルのみが読み取られるため、高速でロードされますページ。
ページが動的な場合、ページのすべての静的な部分をキャッシュしてみてください。たとえば、日付と時刻の値を除いてすべて同じものを表示するページがある場合、他のすべてをキャッシュして、日付と時刻の値を通常どおりロードします。
完了したら、webpagetest.orgを使用してページをテストし、Time To First Byte値(TTFB)を確認します。 0.2秒を超えるものはすべて不良です。
#
をURLで使用できる場合の詳細については、次のURLを参照してください。