2026年10月6日
2026年10月6日
WordPressのURLをwwwあり・なしに統一する方法
はじめに
「www.example.comとexample.comが両方アクセスできて重複コンテンツになっている」「wwwなしに統一したいがリダイレクトが効かない」「HTTPSとHTTPが混在している」——URLの正規化はSEOと信頼性の基盤となる設定です。
症状・原因
WordPressのサイトURLと管理画面URLが一致していない場合、またはDNSでwwwありとなしの両方が解決できる場合、重複コンテンツ問題が発生します。canonicalタグだけでは不十分で、301リダイレクトで統一する必要があります。
解決手順
ステップ1:WordPressの管理画面でURLを設定する
管理画面 → 設定 → 一般 の設定:
wwwなしに統一する場合:
- WordPressアドレス(URL): https://example.com
- サイトアドレス(URL): https://example.com
wwwありに統一する場合:
- WordPressアドレス(URL): https://www.example.com
- サイトアドレス(URL): https://www.example.com
※ 管理画面でのURL変更後はログインできなくなる場合があります。
その場合はwp-config.phpで直接設定してください。
// wp-config.php: URLを直接定義(管理画面でのURL変更でログインできなくなった場合)
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );
ステップ2:.htaccessでwwwなしにリダイレクトする
# .htaccess: wwwなし(example.com)に統一するリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine On
# HTTPS + wwwなしに強制(wwwあり → wwwなしへ301リダイレクト)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# HTTP → HTTPSリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# WordPress標準のリライトルール
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
ステップ3:.htaccessでwwwありにリダイレクトする
# .htaccess: wwwあり(www.example.com)に統一するリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine On
# wwwなし → wwwありへ301リダイレクト
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
# HTTP → HTTPSリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# WordPress標準のリライトルール
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
ステップ4:Nginxでリダイレクトを設定する
# Nginx: wwwなしに統一する設定(/etc/nginx/sites-available/example.com)
# wwwあり → wwwなしへリダイレクト
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
return 301 https://example.com$request_uri;
}
# HTTP → HTTPSリダイレクト
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
# メインのサーバーブロック
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# HSTS(HSTSを設定するとHTTPに戻れなくなるので注意)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
ステップ5:Google Search Consoleで正規URLを設定する
Google Search Console での設定手順:
1. https://search.google.com/search-console にアクセス
2. 「プロパティを追加」→「ドメイン」または「URLプレフィックス」で登録
- ドメインプロパティ(推奨): example.com → wwwあり・なし両方カバー
- URLプレフィックス: https://example.com/ → 正規URLのみ
3. DNSTXTレコードまたはHTMLファイルでサイト所有権を確認
4. 正規URLを使ったサイトマップを送信:
- サイトマップ → サイトマップのURLを追加
- https://example.com/wp-sitemap.xml を送信
5. カバレッジレポートで重複コンテンツがないか確認
// functions.php: canonicalタグで正規URLを明示(rel=canonicalでダブルカバー)
add_action( 'wp_head', function() {
if ( is_singular() ) {
echo '<link rel="canonical" href="' . esc_url( get_permalink() ) . '">' . "\n";
} elseif ( is_home() || is_front_page() ) {
echo '<link rel="canonical" href="' . esc_url( home_url( '/' ) ) . '">' . "\n";
}
}, 1 );
// ※ Yoast SEOなどのSEOプラグインがある場合は重複するため不要
注意事項
- 301リダイレクトを設定する前に必ずバックアップを取ってください。
.htaccessの記述ミスでサイト全体にアクセスできなくなる場合があります。 - wwwあり→なしへの変更後、Google Search Consoleで変更を通知し、Googleにインデックスの更新を促してください。検索順位が一時的に変動することがあります。
- HSTSを設定するとブラウザがHTTPSを強制キャッシュするため、後でHTTPに戻すことが非常に困難になります。SSL証明書の自動更新(Let's Encrypt + Certbot)が確実に動作しているか確認してから設定してください。
まとめ
URL統一は「管理画面→設定→一般でサイトURLを確定→.htaccessでwwwと非wwwの301リダイレクト→HTTPSリダイレクトを追加→wp-config.phpでWP_HOME/WP_SITEURLを定義→Google Search Consoleでドメインプロパティを登録してサイトマップ送信」の流れで整備します。関連記事:WordPressをHTTPSに移行する方法、WordPressのXMLサイトマップを設定する方法。