这些天,在给博客的标签页(tag)添加跳转和META动态申明时,居然让我醍醐灌顶,发现之前的动态适配的做法是多么的苦逼和小白!

必须申明的是,本文的所有做法仅适合非响应式网站,并且需要一个额外的移动站,比如:

创建移动站点后,我们再通过一个js来判断访问者的UA信息,实现自动跳转功能 [详细部署方法]。

所以,移动站点的创建主要是为了弥补PC站在移动小屏设备下显示不佳的缺憾。然而,搜索引擎却会将他们视为不同的站点,从而影响SEO。为了解决这个问题,我们就必须遵循搜索引擎的移动适配原则,对2个站点进行移动适配。

目前张戈掌握的几个搜索引擎的移动适配做法如下:

百度:xml对应关系适配、Meta标注适配(特有)[相关文章1]  [相关文章2];

谷歌:Meta标注适配 (同样适合雅虎、必应等国外搜索引擎)[相关文章];

360:txt对应关系适配[相关文章]。

下面主要分享下META标注和移动跳转的部署方法:

一、完整代码示例

以首页举例,实现移动适配META标注、移动站跳转的做法如下:

①、在PC站点部署代码:

head部分:

<!-- 载入UA判断的js -->
<script src="http://zhangge.net/wp-content/themes/HotNewspro/js/uaredirect.js" type="text/javascript"></script>
<!--移动端访问首页跳转到移动首页-->
<script type="text/javascript">uaredirect("http://m.zhangge.net/");</script>
<!--百度移动适配META申明-->
<meta name="mobile-agent" content="format=xhtml;url=http://m.zhangge.net/" />
<!--谷歌、雅虎等移动META申明-->
<link href="http://m.zhangge.net/" rel="alternate" media="only screen and (max-width: 1000px)" />

footer部分:

<a title="移动版" href="http://m.zhangge.net/#mobile" rel="nofollow">移动版</a>

②、在移动站点部署代码:

head部分:

<!-- 载入UA判断的js -->
<script src="http://zhangge.net/wp-content/themes/MobilePack/uaredirect.js" type="text/javascript"></script>
<!--非移动端访问将跳转至PC页-->
<script type="text/javascript">uaredirect("http://zhangge.net");</script>
<!--谷歌、雅虎等移动META反向申明-->
<link href="http://zhangge.net" rel="canonical" />

footer部分:

<a title="电脑版" href="http://m.zhangge.net/#mobile">电脑版</a>

以上则为首页的移动适配+跳转的完整代码,但一个网站有N多页面,所以我们必须做成动态代码,实现每个网页的移动适配及跳转!

二、动态部署代码

要做动态部署代码,就得考虑建站程序所用语言,目前最流行的建站语言主要是php和asp。php以wordpress为主,其次有emlog、typecho等,asp则主要是ZBlog。

以往张戈博客的文章分享的适配全部都是wordpress专用的,而且代码繁杂,通用性很差!最近,张戈在给博客的标签页做移动适配的时候,突来灵感,找到了一个最简单通用的方法,可以应用到所有建站程序!

核心思想很简单:既然是每个页面都要做移动适配,那么先动态获得当前页面地址,然后进行规则替换即可!

①、Wordpress专用

我们先将如下代码加到header.php

<?php global $wp;
<!-- 获取当前页面地址 -->
$current_url = home_url(add_query_arg(array(),$wp->request));
<!-- 将地址中的http://替换为http://m.  -->
$target_url = str_replace("http://","http://m.","$current_url");
?>

然后继续添加如下代码,就能完成所有页面的PC站点的移动跳转和移动适配:

<script src="<?php bloginfo('template_directory'); ?>/js/uaredirect.js" type="text/javascript"></script>
<script type="text/javascript">uaredirect("<?php echo $target_url; ?>");</script>
<meta name="mobile-agent" content="format=xhtml;url=<?php echo $target_url; ?>" />
<link href="<?php echo $target_url; ?>" rel="alternate" media="only screen and (max-width: 1000px)" />

至于移动站的适配,依葫芦画瓢,把进行替换的那句中的http://和http://m. 换一个位置即可!这还要多简单??

②、PHP通用

I、PC站点:

在PC站点的head部分添加php函数(WP可直接加入function.php模板中),用于获取当前页面的移动地址:

<?php
<!-- 获取当前页面对应的移动页地址 -->
function curMobURL() {$pageURL = 'http';if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}$pageURL .= "://m.";$this_page = $_SERVER["REQUEST_URI"];if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));if ($_SERVER["SERVER_PORT"] != "80") {$pageURL .= $_SERVER["SERVER_NAME"] . ":" .$_SERVER["SERVER_PORT"] . $this_page;}else {$pageURL .= $_SERVER["SERVER_NAME"] . $this_page;}echo $pageURL;
}
?>

然后继续添加如下代码,则可在PC站所有页面的head中动态输出【移动适配\跳转】所需要的代码:

<script src="http://zhangge.net../PC/../uaredirect.js" type="text/javascript"></script>
<script type="text/javascript">uaredirect("<?php curMobURL(); ?>");</script>
<meta name="mobile-agent" content="format=xhtml;url=<?php curMobURL(); ?>" />
<link href="<?php curMobURL(); ?>" rel="alternate" media="only screen and (max-width: 1000px)" />

II、移动站点

相应的在移动站点中部署如下函数,用于获取移动站点所有页面对应的PC页地址:

<?php
<!-- 获取当前页面对应的PC页地址 -->
function curPcURL() {$pageURL = 'http';if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}$pageURL .= "://";$this_page = $_SERVER["REQUEST_URI"];if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));if ($_SERVER["SERVER_PORT"] != "80") {$pageURL .= $_SERVER["SERVER_NAME"] . ":" .$_SERVER["SERVER_PORT"] . $this_page;}else {$pageURL .= $_SERVER["SERVER_NAME"] . $this_page;}echo $pageURL;
}
?>

在移动站中继续添加输出代码:

<script src="http://zhangge.net../Mobile/../uaredirect.js" type="text/javascript"></script>
<script type="text/javascript">uaredirect("<?php curPcURL(); ?>");</script>
<link href="<?php curPcURL(); ?>" rel="canonical" />

③、ASP版本

ASP张戈非常不熟悉,所以就不详细说明了!有了上面的参考,相信用ASP建站程序的童鞋能轻而易举的完成!

下面仅提供获取地址代码,自己参考折腾吧!

I、获取PC站当前页对应的移动站地址:

<%
Function GetLocationURL()
Dim Url
Dim ServerPort,ServerName,ScriptName,QueryString
ServerName = Request.ServerVariables("SERVER_NAME")
ServerPort = Request.ServerVariables("SERVER_PORT")
ScriptName = Request.ServerVariables("SCRIPT_NAME")
QueryString = Request.ServerVariables("QUERY_STRING")
Url="http://m."&ServerName
If ServerPort <> "80" Then UrlUrl = Url & ":" & ServerPort
UrlUrl=Url&ScriptName
If QueryString <>"" Then UrlUrl=Url&"?"& QueryString
GetLocationURL=Url
End Function
Response.Write GetLocationURL()
%>

II、获取移动站当前页面对应的PC站地址:

<%
Function GetLocationURL()
Dim Url
Dim ServerPort,ServerName,ScriptName,QueryString
ServerName = Request.ServerVariables("SERVER_NAME")
ServerPort = Request.ServerVariables("SERVER_PORT")
ScriptName = Request.ServerVariables("SCRIPT_NAME")
QueryString = Request.ServerVariables("QUERY_STRING")
Url="http://"&ServerName
If ServerPort <> "80" Then UrlUrl = Url & ":" & ServerPort
UrlUrl=Url&ScriptName
If QueryString <>"" Then UrlUrl=Url&"?"& QueryString
GetLocationURL=Url
End Function
Response.Write GetLocationURL()
%>

有了以上代码,相信你能写出移动适配的输出代码的,不是么?

④、JS通用版本(适配暂时不可用):

这个极其简单,直接获取当前页面地址,然后替换成对应的移动或PC地址即可:

PC页面head部分:

<script src="http://zhangge.net../PC/../uaredirect.js" type="text/javascript">
<script type="text/javascript">
//替换
var thisURL = document.location.href.replace(/^http:\/\//,"http://m.");
//跳转
uaredirect(thisURL);
//适配
document.write('<meta name="mobile-agent" content="format=xhtml;url='+thisURL+'" /><link href="'+thisURL+'" rel="alternate" media="only screen and (max-width: 1000px)" />');
</script>

移动页面head部分:

<script src="http://zhangge.net../mobile/../uaredirect.js"" type="text/javascript">
<script type="text/javascript">
var thisURL = document.location.href.replace(/^http:\/\/m\./,"http://");
uaredirect(thisURL);
document.write('<link href="'+thisURL+'" rel="canonical" />');
</script>

简单是简单,但这个方法的移动适配是不可行的(跳转可行),因为搜索引擎暂时还无法识别js输出内容。不过,谁也无法拍板说搜索引擎以后不会识别。因此,张戈还是把这个方法贴出来,也许多年后能用上,不是么?

三、注意事项

①、代码针对的是非WWW的顶级域名,如果是带www的,需要修改代码才行,自己摸索吧;

②、代码中用到的UA判断uaredirect.js,移动站和PC站是不一样的!可直接下载张戈博客移动站和PC站的uaredirect.js,放到不同位置,然后相应修改代码中路径即可;

③、PHP版本中用到的函数带,推荐加入到主题模板的function函数模版当中;

④、本文分享的移动适配仅涉及Meta标注的方法,至于另一种sitemap对应关系提交方法请移步查看;

网站移动适配之Meta标注、移动跳转实用篇 转载相关推荐

  1. 网站内页移动适配Meta标注声明 (DEDE 版)

    注册就送 25美金,充100送100.搭梯子的老哥们速度了,活动有限! index 页面 <meta name="mobile-agent" content="fo ...

  2. 【转载】IIS网站配置不带www域名直接跳转带www的域名

    很多时候为了统一网站入口,需要将不带www的主域名解析到带www的域名记录下,当客户访问不带www的域名网址的时候自动跳转到带www的域名,在IIS Web服务器中可以通过URL重写模块来实现此功能, ...

  3. [html] 对于rtl网站的适配有哪些方案?

    [html] 对于rtl网站的适配有哪些方案? transform: scaleX(-1) 或 direction: ltr; 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一 ...

  4. 阿里云 网站https设置 sll申请与nginx跳转配置

    网站https设置 sll申请与nginx跳转配置 这里选择1年 点击证书申请 这里注意要写文件验证 文件验证 上传文件到服务器指定目录,DNS解析到后访问该文件完成验证 手工DNS验证 改域名的DN ...

  5. ui设计移动端字体适配_移动端界面设计之尺寸篇(更新)

    先来看看各种iPhone的尺寸和分辨率,这张图写的很清楚. 设备名称 屏幕尺寸 PPI Asset 竖屏点(point) 竖屏分辨率(px) iPhone X 5.8 in 458 @3x 375 x ...

  6. android ui 切图工具,APP切图标注教程:UI设计切图标注的小工具实用技巧

    分享关于一篇UI设计师必须要懂的切图标注的小工具实用技巧,让你在跟开发工程师协作的时候更加得心应手. 设计师必备的UI切图小工具如下3大常用工具: 1.切图工具 Assistor PS 也是一款PS的 ...

  7. 网站性能优化从入门到粗通(PHP 篇)

    本文来自作者 蒋岩 在 GitChat 上分享 「网站性能优化从入门到粗通(PHP 篇)」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 题外话:本次 Chat 的主题是入门到粗通,所以内 ...

  8. element-ui 左侧边栏el-menu组件: 路由跳转 - 案例篇

    有顶部导航 .还有侧边栏导航:如何实现路由的设置.跳转.高亮? A. 顶部导航 · Hhtml 代码如下:(含高亮设置) <el-menu:default-active="$route ...

  9. 如何运营一家数据标注公司 (基础架构篇)

    如何运营一家数据标注公司 (基础架构篇) 数据标注行业,一个因为人工智能崛起而新兴的行业. 大多数AI实验室.初创型AI公司在发展初期如果雇佣大量的人力进行数据标注,就不得不面临下面两种处境:首先对公 ...

最新文章

  1. 认识RAID磁盘阵列
  2. Python基础(9)水仙花数
  3. 学mysql逻辑思维跟不上_关于避免MySQL替换逻辑SQL的坑爹操作详解
  4. 深入了解以太坊虚拟机第5部分——一个新合约被创建后会发生什么
  5. Qt, Python(一)
  6. 机房收费系统——总结
  7. linux中断处理汇编入口,Linux中断处理体系结构分析(一)
  8. MFC 文档 视图 框架窗口间的关系 和消息传送规律
  9. ACL在QinQ port 中的应用
  10. 看看别人后端API接口写得,那叫一个优雅!
  11. kafka 修改分区_kafka分区
  12. 计算机怎么不显示打开文件桌面,开机不显示桌面图标怎么办【解决方法】
  13. 关于阿里云服务器租用费用的介绍
  14. 为泄愤程序员攻击北京摇号网站昨受审 曾为市高考状元
  15. iPhone “Ineligible Devices”
  16. 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台
  17. 什么是激活函数以及其作用
  18. spark解决Illegal pattern component: XXX NoSuchFieldError: KRYO_SARG_BUFFER
  19. 2013年蓝桥杯题目与解答
  20. JAVA学习内容汇总(一)

热门文章

  1. 动手学强化学习第三章(马尔可夫决策过程)
  2. 【loj2639】[Tjoi2017]不勤劳的图书管理员
  3. 基于matlab的相干信号的doa 估计,基于空间平滑MUSIC算法的相干信号DOA估计(1)
  4. 腾讯云tcp认证考试如何备考?腾讯云tcp认证证书含金量高吗?
  5. opencv的mat赋值_OpenCV Mat 类型定义和赋值
  6. matlab 逐步回归代码,(最新整理)逐步回归matlab程序
  7. python学习笔记:第8天 文件操作
  8. Cocos 引擎助力游戏开发者突围
  9. 2020年|半导体事件的盘中盘!
  10. Java泛型 T extends Serializable