今年总是接到来自Google Search Console这样的提醒邮件:
在 https://example.com/ 上检测到了 路径 问题 致:https://example.com/ 的所有者 Search Console 发现,您的网站受到了3 个 路径 问题的影响: 出现次数最多的错误 错误可能会导致您的网页或功能无法显示在Google 搜索结果中。我们在您的网站中发现了以下错误: 未填写字段“position” 应指定“name”或“item.name” 字段“itemListElement”的值类型无效 我们建议您尽可能修正这些问题,使您的网站能在Google 搜索中尽可能实现最佳的用户体验和覆盖率。
而进入Google Search Console后看到:
错误 应指定“name”或“item.name” 错误 字段“itemListElement”的值类型无效 错误 未填写字段“position”
再点击查看详情,看到:
检测到了 1 项无效内容 无效内容无法在 Google 搜索中显示为富媒体搜索结果。 未填写字段“position” 字段“itemListElement”的值类型无效 应指定“name”或“item.name” type BreadcrumbList
我试了一下,例如:https://jamesqi.com/Drupal?page=4&= 这样的页面放在Google结构化数据验证工具里面去,就无法通过,但我看源代码找不到原因,把这个页面的源代码复制到验证工具里面却又可以通过验证,真是奇怪了,这种报错一直存在,时常收到邮件提醒,困扰我有几个月时间了。😫
今天晚上再下功夫来测试,把这个文件保存为一个test.html文件,可以顺利通过结构化数据验证,那说明是网址的问题,我把https://jamesqi.com/Drupal?page=4&= 改为https://jamesqi.com/Drupal?amp=&page=4 后也是可以通过验证,再尝试https://jamesqi.com/Drupal?page=4&mip 也可以通过验证,说明是网址中&这个的问题,怀疑&符号的转义&写法有关,那就通过下面两个办法来解决:
一、修改page.tpl.php,对页面中的网址进行替换,使用PHP的正则表达式替换函数:
//2019-12-15 纠正amp页面结构化数据不能通过的问题,将https://jamesqi.com/Drupal?page=5&=变换为https://jamesqi.com/Drupal?amp=&page=5 $pattern = "/<a ([^h]*)href=\"([^\?]*)\?(\w+)=([^\"]*)(\?|\&)amp(|=)\"/"; $replace = "<a $1href=\"$2?amp=&$3=$4\""; $output = preg_replace($pattern,$replace,$output);
二、修改.htaccess,对以前的网址进行跳转,使用Apache的ReWrite规则:
# 2019-12-15 纠正amp页面结构化数据不能通过的问题,将https://jamesqi.com/Drupal?page=5&=跳转到https://jamesqi.com/Drupal?amp=&page=5 RewriteCond %{QUERY_STRING} ^(\w+)=(.*)&(|=)$ RewriteRule ^(.*)$ %{REQUEST_URI}?amp=&%1=%2 [R=301,L]
使用上面两个办法后,可以解决我这博客网站中的这个问题,后面再来实施到其它有关的系列网站中。这种问题很奇怪,也很少人遇到,在网上也很难搜到类似问题,只有自己断断续续摸索几个月时间,今天晚上又花了好几个小时才终于是找到问题所在和解决办法,不容易啊。✌
补充:还发现几个以前的问题(url中的&不应该是&)及修改办法,这一点小问题引起的变化还是比较复杂、比较麻烦的。
WEB版本的html.tpl.php中计算的两个地方(header中amphtml链接和下方显示切换amp版本链接)进行一些修改:
<head> ...... //$url_amp= "$url_web?amp"; $url_amp= "$url_web?amp="; ...... //$url_amphtml= "$url_webhtml&amp"; $url_amphtml = str_replace('?','?amp=&',"https://$server_name$request_uri"); ...... </head> <body> ...... //$amp_url = "$url_web?amp"; $amp_url = "$url_web?amp="; ...... //$amp_url = "https://$server_name$request_uri&"; $amp_url = str_replace('?','?amp=&',"https://$server_name$request_uri"); ...... //$normal = l('WEB',$normal_url); //$amp = l('AMP',$amp_url); //$mip = l('MIP',$mip_url); $normal = "<a href=\"$normal_url\">WEB</a>"; $amp = "<a href=\"$amp_url\">AMP</a>"; $mip = "<a href=\"$mip_url\">MIP</a>";
AMP版本的html.tpl.php中计算的两个地方(header中canonical链接和下方显示切换web版本链接)进行一些修改:
//$position = strpos($request_uri,'?amp'); //if ($position == FALSE) $position = strpos($request_uri,'&'); //$request_uri_before_amp = substr($request_uri,0,$position); //$normal_url = "https://$server_name$request_uri_before_amp"; //2019-12-16 上面几行改为下面的$normal_url计算方式 $normal_url = "https://$server_name$request_uri"; $normal_url = str_replace('&amp=','',$normal_url); $normal_url = str_replace('&amp','',$normal_url); $normal_url = str_replace('&=','',$normal_url); $normal_url = str_replace('&','',$normal_url); $normal_url = str_replace('?amp=&','?',$normal_url); $normal_url = str_replace('?amp&','?',$normal_url); $normal_url = str_replace('?amp=','',$normal_url); $normal_url = str_replace('?amp','',$normal_url); ...... //$normal = l('WEB',$normal_url); //$amp = l('AMP ⚡',$amp_url); $normal = "<a href=\"$normal_url\">WEB</a>"; $amp = "<a href=\"$amp_url\">AMP ⚡</a>";
MIP版本的html.tpl.php中计算的两个地方(header中canonical链接和下方显示切换web版本链接)进行一些修改:
//$position = strpos($request_uri,'?mip'); //if ($position == FALSE) $position = strpos($request_uri,'&mip'); //$request_uri_before_mip = substr($request_uri,0,$position); //$normal_url = "https://$server_name$request_uri_before_mip"; //2019-12-16 上面几行改为下面的$normal_url计算方式 $normal_url = "https://$server_name$request_uri"; $normal_url = str_replace('&mip=','',$normal_url); $normal_url = str_replace('&mip','',$normal_url); $normal_url = str_replace('&mip=','',$normal_url); $normal_url = str_replace('&mip','',$normal_url); $normal_url = str_replace('?mip=&','?',$normal_url); $normal_url = str_replace('?mip&','?',$normal_url); $normal_url = str_replace('?mip=','',$normal_url); $normal_url = str_replace('?mip','',$normal_url); ...... //$normal = l('WEB',$normal_url); //$mip = l('MIP ⚡',$mip_url); $normal = "<a href=\"$normal_url\">WEB</a>"; $mip = "<a href=\"$mip_url\">MIP ⚡</a>";
评论1
写得确实专业,,学习了
写得确实专业,,学习了