牛牛逼逼叉叉
菜单

【移动干货】代码适配对百度友好代码详解

2016年03月10日,分类《SEO》,作者:
博客捐助

之前学院发布过代码适配移动站点对百度友好案例分享,代码适配站点目前并非主流,但有其自己的特点和设计规范。学院邀请相关专家再次分享下如何建设对百度友好的代码适配站点。

一、什么样的网站适合做代码适配?

代码适配的特点是网站在移动化的过程中,使用了相同的网址作为移动适配的方法,根据服务器对用户设备浏览器user agent参数的获取,针对不同设备类型加载不同的访问界面。也就是代码适配成功之后,同一套网站url,在不同设备上打开的情况下可以是完全不同的页面结构和样式(包括htmlcss)。

代码适配的优点:和自适应站点一样,网页版和移动版使用了同一套url规则,保持了网页版的原有链接,SEO策略可以保持一致,也避免了站内重复内容的产生;相对于自适应网站设计前端性能会很高,因为是同一套代码应对所有的设备显示,需要加载针对响应式所需要的css,javascript,但是代码适配的话可以简化为只包含为相应设备优化的内容,以实现较少的前端性能损耗。

代码适配的缺点:后期代码维护很麻烦,要针对不同设备或不同分辨率屏幕设计相应的模板文件,内容的部分虽然可以使用内容管理系统在所有模板上自动同步更新内容,但是根据网站的复杂程度,代码适配所需的开发时间很有可能较长。

综上所述,网站结构简单,网页模板不是很多的站点比较适合做代码适配,比如企业站,个人博客等。另外要注意的是,因为需要服务器端脚本来辅助实现,所以您的网站必须在独立服务器或VPS云主机上,虚拟主机用户就不要进行代码适配您的网站了。

二、如何实现代码适配?

 1.服务器端的准备工作

为什么要修改Vary HTTP头?其实代码适配应用的是HTTP的内容协商机制,即服务器为同一个URL的请求提供了多份不同的文档作为响应,服务端和客户端之间会根据事先设定好的协商机制来选择适合的版本。最常见的就是服务端根据客户端发送的请求头中包含某些字段自动发送最合适的版本。Vary的作用就在于告诉代理服务器、缓存或者CDN,如何判断请求是否一样,vary中的组合就是代理服务器、缓存或者CDN判断的依据,比如Vary中有 User-AgentUser-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本。例 如: User-Agent: Mozilla/4.0 (compatible; MSIE8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)),那么User-Agent是否变化就是判断的依据,即使同一个页面请求,用户使用IE打开,再用Firefox打开的时候,会被代理服务器/CDN/缓存认为是不同的请求,如果Vary中没有User-Agent,那么代理服务器/CDN/缓存会认为是相同的页面,直接给用户返回缓存的页面,而不会再去web服务器请求相应的页面。总之服务器开启了Vary:User-Agent之后,客户端的任何请求信息中会包含UA的信息。同时官方说明它有助于百度spdier 更快速地发现针对移动设备进行优化的内容,并且提高其他ua抓取此网页的优先级。

2.如何修改服务器http

首先查看自己网站的http响应头的方法有很多,Linux服务器端可以直接使用这个shell命令:curl –head http://www.xxxx.com/ ;Chrome 浏览器自带的抓包工具也可以查看;或者直接使用站长平台的抓取诊断工具就可以,下面就是查询一个服务器响应的http头的结果:

062311448961199

这个例子里目前的http头信息中,Vary项现在是Accept-Encoding;而我们要修改的也就是这一项。具体修改http头的方法根据不同的web服务器用不同的设置方法:

1)     如果web服务器是apache的话,第一步要确保服务器是否安装了mod_headers模块。如果是第一次编译安装apache,确保./configure–prefix=/usr/local/apache2 –enable-rewrite –enable-so –enable-headers–enable-expires –with-mpm=worker –enable-modules=most –enable-deflate等,后面有–enable-headers;如果apache已经安装编译好了,httpd -M 指令可以列出编译过的模块,同时能看到哪些模块是static静态编译,哪一些是shared动态加载的。要往已经编译安装好的apache添加mod_headers模块,要在httpd的源文件里面找到mod_headers.c ,运行程序编译出mod_headers.so ,然后在httpd.conf添加进来,参考步骤如下:

#cd /root/src/httpd-2.2.26/modules/mappers

#/usr/local/apache/bin/apxs-c mod_headers.c

#gcc-shared -o mod_headers.so mod_headers.o -lgdbm

#/usr/local/apache/bin/apxs-i -A -n mod_headers mod_headers.so

/usr/local/apache/bin/是正在使用的apahce的目录

第二步,在httpd.conf 中添加headers_module模块:

找到# LoadModule,在它的下一行插入:

LoadModule headers_module  modules/mod_headers.so

保存更新,然后在要修改的目标站点的配置文件中,添加下面语句:

<IfModulemod_headers.c>

        <FilesMatch”.(js|css|xml|gz|html)$”>

          Header append Vary: User-Agent

        </FilesMatch>

</IfModule>

保存之后,然后重启apache就可以生效了。不需要对服务器进行重新编译。

2)如果web服务器是nginx的话,第一步要确定安装了ngx_headers_more模块,nginx源码没有包含该模块,需要另行添加。安装方法:

wget ‘http://nginx.org/download/nginx-1.5.8.tar.gz’

tar –xzvf nginx-1.5.8.tar.gz

cd nginx-1.5.8/

#here we assume you would install you nginx under/opt/nginx/.

./configure –prefix=/opt/nginx \–add-module=/path/to/headers-more-nginx-module

make

make install

第二步,在配置文件nginx.conf中,添加如下代码:

gzip_vary on;

more_set_headers -s 200 “Vary: “”Accept-Encoding, User-Agent”;

然后重启服务器。

3)  如果是IIS

web.config里加上如下配置,web.config位置在:%windir%\Microsoft.NET\Framework\.net版本号\CONFIG\Web.config <system.webServer>
<httpProtocol>
<customHeaders>
<remove name=”Vary”></remove>
<add name=”Vary” value=”Accept-Encoding”></add>
</customHeaders>
</httpProtocol>
</system.webServer>

最后,同样可以用上面方法再请求一次http头,来判断我们的设置有没有成功。如果返回的头中,有Vary:User-Agent 或者Vary:Accept-Encoding User-Agent 就表明我们设置成功了。

3.完成内容协商

首先设计好针对不同设备的网站模板文件,可以和pc端相应的模板文件放在同一个路径下,命名成不同的文件比如index.pc.htm index.iphone.htm index.andori.htm index.tv.htm等都是网站首页在不同设备下的模板文件等待调用。

在这里简单的仅以通过php代码来实现的方式举例,在url对应的动态文件中(可能是某个入口文件,也可能是通过入口文件include某控制文件),通过如下代码实现动态适配:

$UA = strtoupper($_SERVER[‘HTTP_USER_AGENT’]);

if(preg_match(“/(iPhone|iPad|iPod|Android|ucweb|windowsphone|Blackberry)/i”, $UA)) {

  /* 加载相应的模板文件 */

}

这段代码含义是,首先通过$UA =strtoupper($_SERVER[‘HTTP_USER_AGENT’])来获取用户 访问的浏览器设备信息,通过匹配得到加载出不同设备系统,浏览器下适配好的不同模板文件(以上匹配的UA只限iphone,ipad,ipod,android,uc移动浏览器,windows phone,黑莓手机等设备),如果大家想了解更多的httpuser-agent关键字,可自行去网上查找。

4.添加metaapplicable-device标签

Vary标头添加好后,服务器端就能根据请求头中的UA信息,判断客户端是PC还是移动设备甚至是什么移动设备的请求了,有了这个服务器就能根据设定给出相应的响应文件,从而达到同一套url,不一样的设备显示不一样的页面样式。为了让百度更好地识别我们的页面是 PC 还是 Mobile,就需要使用百度自定义的这个 Meta applicable-device 标签。这个标签可以帮助百度校验自己的判断,并及时进行修正。这部分是在网站的模板里添加的。如果是PC端的模板文件,则在<head></head> 之间添加<metaname=”applicable-device”content=”pc”>;如果是移动端的模板文件,则在<head></head> 之间添加<metaname=”applicable-device”content=” mobile “>;这样即使通过服务器的设置BaiduSpider判断错误了,这个标签的设置也能起到修正的作用。

5.Firefox插件

之前站长学院文章<代码适配移动站点对百度友好案例分享>中提到过Google 浏览器来模拟UA效果的插件,在此我再介绍一款火狐浏览器的UA模拟插件,它可以帮助各位站长轻松的伪装”成其他平台/品牌的浏览器,来测试自己网站的适配结果

首先通过https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/ 下载并安装此插件,

完成后,点击工具栏上的按钮,打开UserAgent Switcher的菜单

074801448961199

选择“EditUser Agent”“UserAgent Switcher”=>”Options”,打开如下的设置页面。

013041448961199

点击右下角的“Downloadlists of user agents to import…”链接,在打开的网页中找到下图中标注的位置,我们可以找到最常用的UA列表了,这里直接给出列表的下载地址,方便大家下载。

019151448961201

下载完成后,回到设置页面,点击左下方的“Import…”按钮,将刚才下载的useragentswitcher.xml 导入到扩展中即可 ,之后我们就可以在浏览器上通过切换访问刚刚适配好的页面啦,之后补充一点我们仍然可以在现有的UA基础上“新建”(New)以及“修改”(Edit),来满足我们的要求。

效果如下:

056261448961200



发表评论

电子邮件地址不会被公开。 必填项已用*标注

【上一篇】

【移动干货】移动适配工具全解析

【下一篇】

织梦移动化指南