ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
サンディスク 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対応は完璧にはなりません¥。
とはいえ、そんなに難しい作業ではないので早めにサクッと対応してみてください。