Google 没有索引 https
Google is not indexing https
我使用http协议已经很久了。多年后,我实施了域证书。现在我正在尝试使用 https:// 协议索引网站,但 Google 仍然索引 http 协议。
我已经尝试了几种方法。我在 DirectAdmin 中启用了 'Force SSL with https redirect' 选项。
我更改了 .htaccess,以便浏览器将每个选项重定向到 https 协议:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RedirectMatch permanent index.php/(.*) https://www.***.com/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html) [NC]
RewriteRule ^index\.php$ https://www.***.com/ [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ /.*/index\.(php|html)\ HTTP
RewriteRule (.*)index\.(php|html)$ / [R=301,L]
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^home\.html$ "https\:\/\/www\.domain\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^home$ "https\:\/\/www\.domain\.com\/" [R=301,L]
我创建了一个仅包含 https:// 协议的 sitemap.xml。
在 Google Search Console 中,我看到该网站今天已编入索引,'Google selected canonical URL' 仍然是 http 协议。
有人知道我需要做什么来解决这个问题吗?
I changed my .htaccess so the browser redirects every option to the https protocol:
实际上,你没有。
您根本没有 HTTP 到 HTTPS 的重定向,第一条规则(非 www 到 www 的重定向)专门维护请求的任何协议(HTTP 或 HTTPS)。
改为尝试以下两个规则,替换您的第一个(非 www 到 www)规则:
# non-www to www (and HTTPS)
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTP to HTTPS (already www)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
剩下的指令也可以简化...
# Redirect to path-info (removing "index.php")
RewriteRule ^(.+/)?index\.php/(.*) / [R=301,L]
# Remove "index.php" from the end of the URL
RewriteRule ^(.+/)?index\.php$ / [R=301,L]
# Redirect "home" and "home.html" to the document root
RewriteRule ^home(\.html)?$ / [R=301,L]
后面的指令好像不需要针对域名,所以我去掉了看似多余的条件。
我已经 simplified/reduced 将删除 index.php
的两条规则合并到一个指令中。除非你有一个前端控制器,你将所有请求路由到 index.php
,否则你不需要额外的 condition 来检查 THE_REQUEST
。 (您发布的指令中没有前端控制器。)
(虽然如果你没有前端控制器,删除并重定向到路径信息的规则有点不合适?)
我把mod_aliasRedirectMatch
改成了对应的*1mod_rewrite规则。 mod_alias 指令在 mod_rewrite 之后处理,尽管配置文件中的指令顺序明显,因此建议避免混合来自两个模块的重定向以避免意外冲突。
(*1 我也“纠正”了这一点以避免匹配 URL 形式的 <anything>index.php
,而不是 <anything>/index.php
,我认为这是意图。)
清除浏览器缓存并首先使用 302(临时)重定向进行测试,以避免任何潜在的缓存问题。
I also tried to delete the canonical link element
您不应该删除“规范 link 元素”,前提是您 link 使用正确的规范 URL,即。 HTTPS + www.
您实际上并没有说明自“切换到 HTTPS”以来已经过去了多长时间,但这可能需要一些时间。 Google 自然喜欢 HTTPS,但由于您网站的年龄,您可能有很多 HTTP 返回 link。将 HTTP 301 重定向到 HTTPS 很重要。
您应该在 GSC 中注册这两个属性:HTTP 和 HTTPS 并监视两者的索引状态。
注意:这种性质的问题通常最好在网站管理员堆栈中提出:https://webmasters.stackexchange.com/
我使用http协议已经很久了。多年后,我实施了域证书。现在我正在尝试使用 https:// 协议索引网站,但 Google 仍然索引 http 协议。
我已经尝试了几种方法。我在 DirectAdmin 中启用了 'Force SSL with https redirect' 选项。
我更改了 .htaccess,以便浏览器将每个选项重定向到 https 协议:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RedirectMatch permanent index.php/(.*) https://www.***.com/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html) [NC]
RewriteRule ^index\.php$ https://www.***.com/ [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ /.*/index\.(php|html)\ HTTP
RewriteRule (.*)index\.(php|html)$ / [R=301,L]
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^home\.html$ "https\:\/\/www\.domain\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^home$ "https\:\/\/www\.domain\.com\/" [R=301,L]
我创建了一个仅包含 https:// 协议的 sitemap.xml。
在 Google Search Console 中,我看到该网站今天已编入索引,'Google selected canonical URL' 仍然是 http 协议。
有人知道我需要做什么来解决这个问题吗?
I changed my .htaccess so the browser redirects every option to the https protocol:
实际上,你没有。
您根本没有 HTTP 到 HTTPS 的重定向,第一条规则(非 www 到 www 的重定向)专门维护请求的任何协议(HTTP 或 HTTPS)。
改为尝试以下两个规则,替换您的第一个(非 www 到 www)规则:
# non-www to www (and HTTPS)
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTP to HTTPS (already www)
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
剩下的指令也可以简化...
# Redirect to path-info (removing "index.php")
RewriteRule ^(.+/)?index\.php/(.*) / [R=301,L]
# Remove "index.php" from the end of the URL
RewriteRule ^(.+/)?index\.php$ / [R=301,L]
# Redirect "home" and "home.html" to the document root
RewriteRule ^home(\.html)?$ / [R=301,L]
后面的指令好像不需要针对域名,所以我去掉了看似多余的条件。
我已经 simplified/reduced 将删除 index.php
的两条规则合并到一个指令中。除非你有一个前端控制器,你将所有请求路由到 index.php
,否则你不需要额外的 condition 来检查 THE_REQUEST
。 (您发布的指令中没有前端控制器。)
(虽然如果你没有前端控制器,删除并重定向到路径信息的规则有点不合适?)
我把mod_aliasRedirectMatch
改成了对应的*1mod_rewrite规则。 mod_alias 指令在 mod_rewrite 之后处理,尽管配置文件中的指令顺序明显,因此建议避免混合来自两个模块的重定向以避免意外冲突。
(*1 我也“纠正”了这一点以避免匹配 URL 形式的 <anything>index.php
,而不是 <anything>/index.php
,我认为这是意图。)
清除浏览器缓存并首先使用 302(临时)重定向进行测试,以避免任何潜在的缓存问题。
I also tried to delete the canonical link element
您不应该删除“规范 link 元素”,前提是您 link 使用正确的规范 URL,即。 HTTPS + www.
您实际上并没有说明自“切换到 HTTPS”以来已经过去了多长时间,但这可能需要一些时间。 Google 自然喜欢 HTTPS,但由于您网站的年龄,您可能有很多 HTTP 返回 link。将 HTTP 301 重定向到 HTTPS 很重要。
您应该在 GSC 中注册这两个属性:HTTP 和 HTTPS 并监视两者的索引状态。
注意:这种性质的问题通常最好在网站管理员堆栈中提出:https://webmasters.stackexchange.com/