PWA対応のTipsをAMPと比較(投稿ページのみ)
この記事では、PWA(Progressive Web App) を導入する際のポイントを、AMP(Accelerated Mobile Pages)と比較しながら解説します。さらに、WordPressで投稿ページだけに反映し、固定ページ・お知らせ・アーカイブ・カテゴリーには影響しない設定方法も紹介します。
1 AMPとPWAの違い
| 項目 | AMP | PWA |
|---|---|---|
| 目的 | モバイルで高速表示 | アプリのような体験を実現 |
| オフライン対応 | × 不可 | ◎ 可能(キャッシュ機能) |
| 通知機能 | × 不可 | ◎ プッシュ通知対応 |
| SEO効果 | △(以前は優遇) | ◎ UX向上で間接的に効果 |
| 自由度 | 低い(制約あり) | 高い(通常HTML+JS) |
| 主な構成 | AMP HTML / AMP JS / AMP Cache | manifest.json / Service Worker / HTTPS |
2 投稿ページだけPWAを反映する方法
まず、PWAは「HTTPSサイト」「manifest.json」「service-worker.js」が必要です。
これをWordPressの投稿ページだけで読み込むように条件分岐します。
2.1 functions.php にコードを追加
//----------------------------------------------
// 投稿ページだけでPWA用ファイルを読み込む
//----------------------------------------------
add_action('wp_head', function() {
if ( is_single() && !is_page() && !is_category() && !is_archive() ) {
// manifest.json はサイトルートに設置
echo '<link rel="manifest" href="/manifest.json">';
}
});
add_action('wp_enqueue_scripts', function() {
if ( is_single() && !is_page() && !is_category() && !is_archive() ) {
wp_enqueue_script('pwa-register', get_stylesheet_directory_uri() . '/js/pwa-register.js', [], null, true);
wp_enqueue_script('pwa-body', get_stylesheet_directory_uri() . '/js/pwa-body.js', [], null, true);
}
});
// 投稿ページだけ body に pwa-active クラスを追加
add_filter('body_class', function($classes) {
if (is_single()) {
$classes[] = 'pwa-active';
}
return $classes;
});
3 Service Workerの登録スクリプト
js/pwa-register.js ファイルをテーマ直下に設置します。
ファイル名:pwa-register.js
保存先:wp-content/themes/child-theme/js/pwa-register.js
//-------------------------------------------
//Service Workerの登録スクリプト
//-------------------------------------------
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/service-worker.js')
.then(function(reg) {
console.log('ServiceWorker registered:', reg.scope);
})
.catch(function(err) {
console.log('ServiceWorker registration failed:', err);
});
});
}
3.1 ディレクトリ構造
- child-theme/
- archive.php
- category.php
- functions.php
- footer.php
- header.php
- style.css
- js/
- pwa-register.js
4 Service Worker の本体
service-worker.js はサイトルートに設置します。
ファイル名:service-worker.js
保存先:public_html/service-worker.js
//-------------------------------------------
// Service Worker の本体
//-------------------------------------------
const CACHE_NAME = 'pwa-cache-v1';
const urlsToCache = [
'/',
'/wp-content/themes/your-theme/style.css',
'/wp-content/themes/your-theme/js/pwa-register.js'
];
// インストール
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME).then(cache => {
return cache.addAll(urlsToCache);
})
);
});
// リクエスト時
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
return response || fetch(event.request);
})
);
});
3.1 ディレクトリ構造
- public_html/
- wp-admin/
- wp-content/
- wp-includes/
- functions.php
- wp-config.php
- wp-login.php
- service-worker.js
5 manifest.json の例
サイトルートに設置します。
JavaScript Object Notation(ジャバスクリプト・オブジェクト・ノーテーション)の略で、「データをやり取りするための軽量なテキスト形式」です。ジェイソン または ジーソンと呼びます。
ファイル名:manifest.json
保存先:public_html/manifest.json
保存方法:manifest.json の保存方法は、javascriptと同じで、ファイル名を「manifest.json」、ファイルの種類「全てのファイル」、文字コード「UTF-8N(BONなし)」、改行コード「LF」です。
{
"name": "My WordPress PWA",
"short_name": "WP PWA",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#0073aa",
"icons": [
{
"src": "/wp-content/themes/your-theme/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/wp-content/themes/your-theme/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
3.1 ディレクトリ構造
- public_html/
- wp-admin/
- wp-content/
- wp-includes/
- functions.php
- wp-config.php
- wp-login.php
- service-worker.js
- manifest.json
6 投稿ページ限定でPWAを有効にするカスタムJS
「投稿ページのみ」でbodyタグに pwa-active クラスを追加します。
ファイル名:pwa-body.js
保存先:wp-content/themes/child-theme/js/pwa-body.js
//-------------------------------------------
//投稿ページ限定でPWAを有効にする
//-------------------------------------------
document.addEventListener('DOMContentLoaded', function() {
if (document.body.classList.contains('single-post')) {
document.body.classList.add('pwa-active');
}
});
3.1 ディレクトリ構造
- child-theme/
- archive.php
- category.php
- functions.php
- footer.php
- header.php
- style.css
- js/
- pwa-body.js
- pwa-register.js
7 確認方法
WordPressの投稿ページだけでPWA(Progressive Web App)が正しく有効になっているかを確認します。
- 投稿ページをブラウザで開きます。
- HTMLの
<head>内を確認します。以下のタグが存在すれば、manifest.json が正しく読み込まれています。<link rel="manifest" href="/manifest.json"> - body タグに
pwa-activeクラスが付与されているか確認します。投稿ページの場合、以下のようになっていればOKです。<body class="single-post pwa-active"> - AMPは「読み込み速度最優先」、自由度は低い。
- PWAは「UX(体験)最優先」、デザイン・機能の自由度が高い。
- AMPが“瞬間表示”なら、PWAは“継続利用”に強い。
- AMP専用HTMLやJSの制約が多く、デザインや機能の自由度が低い。
- メンテナンスコストが高い(テーマ・プラグイン対応が必要)。
- PWAや高速レンダリング技術の普及により、AMPでなくても高速表示が可能。
- Googleの公式方針変更でSEOメリットが減少。
- 既存のAMP対応サイトの廃止・非対応化
- 通常のレスポンシブHTML+PWAなどでUX向上を目指す
- テーマやプラグインもAMP非対応で開発されるケースが増加
この2点を確認できれば、投稿ページ限定でPWAが有効になっていることが確認できます。
- 固定ページやアーカイブ、カテゴリーなどでは manifest.json は読み込まれず、body に
pwa-active クラスも付かないことを確認してください。- もし body クラスや manifest リンクが表示されない場合は、functions.php や js ファイルの設置場所、条件分岐を再確認してください。
8 ポイント:AMPとの住み分け
WordPress投稿ページだけをPWA化することで、コーポレートサイトや固定ページを壊さず、ブログ読者にアプリのような快適な体験を提供できます。
9 Googleの方針変更
2021年、Googleはニュースコンテンツに関して「AMPでなくてもトップニュースに表示可能」と発表しました。これにより、AMP対応していないサイトでもSEO上の不利はほとんどなくなりました。
// 例: Googleの発表内容の要点
// ・AMP非対応でもニュースカルーセルに表示可能
// ・表示順位の評価にAMPは必須ではない
10 AMPが廃止されつつある理由
11 現状の運営者・開発者の動き
12 代用プラグイン
コードによる実装が難しい場合は、以下のPWA対応プラグインを使うことで、初心者でも簡単に導入できます。
| プラグイン名 | 主な機能・特徴 |
|---|---|
| Super Progressive Web Apps |
WordPressサイトを即座にPWA化できます。ホーム画面追加、オフライン閲覧、アイコン設定など基本機能を搭載。 ▶ 公式プラグインページ |
| PWA for WP & AMP |
AMP対応サイトでも利用可能。オフラインキャッシュ・プッシュ通知・Service Worker 自動生成など多機能。 ▶ 公式プラグインページ |
| PWA (Feature Plugin) |
WordPress公式チーム開発のベースプラグイン。manifest.json と Service Worker を標準的に扱えるため、開発者向け。 ▶ 公式プラグインページ |
- プラグイン導入後もサイトがHTTPS化されている必要があります。
- manifest.json や service-worker.js を手動で上書きする際は、テーマやキャッシュの競合に注意してください。
- AMP対応サイトでは
PWA for WP & AMP を選ぶと互換性が高くおすすめです。
PWAを導入することで、WordPressサイトに「オフライン閲覧」「ホーム画面追加」「プッシュ通知」などの機能を付与できます。
投稿ページだけに限定すれば、固定ページやコーポレート部分へ影響を与えず、ブログ読者にアプリのような体験を提供可能です。
コードによる実装は柔軟性に優れていますが、初心者の方はプラグインでの導入も十分実用的です。
目的に合わせて「自作コード」か「プラグイン導入」を選択しましょう。
13 まとめ
現在、AMP対応は必須ではなく、多くの開発者・サイト運営者は廃止または非対応化する流れです。高速表示やSEOはAMP以外の技術でも十分実現可能なので、AMPに依存せずに柔軟なWeb運営を考えることが推奨されます。
今後はPWA(Progressive Web App)や標準の高速レンダリング技術を活用し、ユーザー体験とサイト管理の両立を意識するのが現実的な方向性です。


