投稿日:
2018年12月3日
最終更新日:
【原因はStaticPress】吐き出したAMPページがGoogleSearchConsoleで「<meta http-equiv>」が原因でエラー発生する際の対応方法【WordPress】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
目次
SearchConsolsでAMPエラー
StaticPressが出力したAMPページのHTML構造がダメらしい
先日、WordPressの「AMP for WordPress」プラグインを利用して、サイトをAMP対応する方法についてご紹介しました。
AMPページもしっかり転送されていましたが、HTMLの内容に不備があるらしく、GoogleSearchConsolsにてエラーが出るようになりました。
全部エラー。。。orz
原因はStaticPressの更新日時追加処理
エラーの内容を見てみると、以下のようになっています。
なにやら、<meta http-equiv="Last-Modified" content="...">
のタグにAMPでは使えない属性であるhttp-equiv
を含んでしまっているようですね。
このタグは、Wordpressで表示している際のHTMLには存在していません。
これは、StaticPressがHTMLファイルを生成する際に自動で追加されるタグなのです!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// 461行目付近
public function add_last_modified($content, $http_code = 200) {
if (intval($http_code) === 200) {
$type = preg_match('#<!DOCTYPE html>#i', $content) ? 'html' : 'xhtml';
switch ( $type ) {
case 'html':
$last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT">', gmdate("D, d M Y H:i:s"));
break;
case 'xhtml':
default:
$last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT" />', gmdate("D, d M Y H:i:s"));
break;
}
// ここで追加されている
$content = preg_replace('#(<head>|<head [^>]+>)#ism', '$1'."\n".$last_modified, $content);
}
return $content;
}
|
なるほど。。。
原因が分かりましたので、AMPページの場合はこの処理を行わないように修正してみましょう。
手順
class-static_press.phpの修正
まずは、AMPページの場合にエラーの原因のタグを追加しないようにclass-static_press.php
の373行目辺りと465行目あたりに処理を修正します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
// 373行目辺り
switch ($file_type) {
case 'front_page':
case 'single':
case 'term_archive':
case 'author_archive':
case 'seo_files':
case 'other_page':
// AMP判定
$haystack = $url; // 追加
$needle = "amp/";// 追加
$amp_page = (strrpos($haystack, $needle) === strlen($haystack) - strlen($needle))? 1 :0;// 追加
// get remote file
if (($content = $this->remote_get($url)) && isset($content['body'])) {
if ($blog_charset === 'UTF-8') {
$content['body'] = $this->clean_utf8($content['body']);
}
$http_code = intval($content['code']);
switch ($http_code) {
case 200:
if ($crawling)
$this->other_url($content['body'], $url, $http_code, $amp_page);// 第三引数に$amp_pageを追加
case 404:
if ($create_404 || $http_code == 200) {
$content = apply_filters('StaticPress::put_content', $content['body'], $http_code, $amp_page);// 第三引数に$amp_pageを追加
$this->make_subdirectories($file_dest);
file_put_contents($file_dest, $content);
$file_date = date('Y-m-d h:i:s', filemtime($file_dest));
}
}
}
break;
...................
// 465行目あたり
public function add_last_modified($content, $http_code = 200, $amp_page) { // 第三引数に$amp_pageを追加
if (intval($amp_page) === 1) { // APMページの場合の早期リターンを追加
return $content;
}
if (intval($http_code) === 200) {
$type = preg_match('#<!DOCTYPE html>#i', $content) ? 'html' : 'xhtml';
switch ( $type ) {
case 'html':
$last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT">', gmdate("D, d M Y H:i:s"));
break;
case 'xhtml':
default:
$last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT" />', gmdate("D, d M Y H:i:s"));
break;
}
$content = preg_replace('#(<head>|<head [^>]+>)#ism', '$1'."\n".$last_modified, $content);
}
return $content;
}
|
class-static_press.php
への修正はこれで完了です。
plugin.phpの修正
次に、plugin.php
の49行目あたりを修正します。
1
2
3
4
5
6
7
|
add_filter('StaticPress::get_url', array($staticpress, 'replace_url'));
add_filter('StaticPress::static_url', array($staticpress, 'static_url'));
add_filter('StaticPress::put_content', array($staticpress, 'rewrite_generator_tag'), 10, 2);
add_filter('StaticPress::put_content', array($staticpress, 'add_last_modified'), 10, 3); // 第四引数を2から3に変更
add_filter('StaticPress::put_content', array($staticpress, 'remove_link_tag'), 10, 2);
add_filter('StaticPress::put_content', array($staticpress, 'replace_relative_URI'), 10, 2);
add_filter('https_local_ssl_verify', '__return_false');
|
これで完了です!!
この修正は許容する引数を2個から3個に変更する、という修正になります。
この修正を行わないと、$amp_page
に引数が渡ってこなくなってしまいます。
確認
あとは、いつも通りに転送を始めれば適用されます。
通常ページ
今まで通り、変わらずに<meta http-equiv="Last-Modified" content="...">
が追加されています。
AMPページ
こちらは、<meta http-equiv="Last-Modified" content="...">
が削除されているのが確認出来ました。
終わりに
以上のように、ちょっと一手間加えないとStaticPressのAMP対応は完璧にはなりません¥。
とはいえ、そんなに難しい作業ではないので早めにサクッと対応してみてください。