Googelbot 找到了我的原始 URI,尽管我有一个有效的重写指令

Googelbot 找到了我的原始 URI,尽管我有一个有效的重写指令

我有 :

RewriteRule ^Article/([^/]*)$ /article.php?newsid=$1 [L]

这意味着 URL 必须是//example.com/Article/855563 但 Google 会抓取//example.com/article.php?newsid=855563。我能做些什么来防止这种情况发生?或者将 301 重定向到example.com/Article/855563

答案1

首先,您需要确定 Google 抓取错误 URL 的原因。

  • 您是否更改了现有的 URL 结构(已被搜索引擎编入索引并链接到外部)?在这种情况下,您需要实施从旧 URL 到新 URL 的重定向,以保留 SEO 并让搜索引擎在 SERP 中替换旧 URL。

  • 您是否在无意中在内部链接到错误的 URL,并向搜索引擎公开“错误的”URL?如果是这样,这些必须被修复实施重定向。

否则,Google 就不应该能够发现“错误”的 URL。

您还应该rel="canonical"在页面头部实现一个标签,以便向搜索引擎指示正确的规范 URL。

为了将 URL 从外部重定向/article.php?newsid=<newsid>/Article/<newsid>(规范 URL) - 现有 URL 的反向内部重写- 然后您可以在文件顶部附近执行类似以下的操作.htaccess现有的重写):

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^newsid=([^&]*)
RewriteRule ^article\.php$ /Article/%1 [R=302,L]

REDIRECT_STATUS为了防止重定向循环,检查环境变量的第一个条件是必要的 - 它确保规则仅在来自客户端的直接请求上处理,而不是重写的请求(您现有的指令)。

第二个条件捕获 URL 参数的值newsid(出现在 URL 路径的开头)。该值保存在%1反向引用中(稍后在RewriteRule 代换)。请注意,这将捕获任何事物(如您重写的那样),但是,如果newsid值始终是数字,那么这应该更加严格。例如^newsid=(\d+)(仅 1 位或多位数字)。

请注意,目前这是 302(临时)重定向。只有确认其正常工作后才可将其更改为 301(永久)重定向 - 以避免任何缓存问题。

相关内容