记一段SPA的SEO历程:Html5 History Api 大显神通!

news/2024/4/29 6:00:07/文章来源:https://blog.csdn.net/weixin_34301307/article/details/89527971

背景

想当年,我做了一个新媒体网站项目(AIISPO,已下线)。跟普通资讯网站不一样的是,老板要求PC端前台的文章阅读模式一定得是瀑布流+模态框瀑布流指的是以瀑布流的形式将文章罗列出来,而模态框则指的是点击瀑布流中代表文章的某个文块时,直接在当前页面弹出模态框来显示文章正文。

瀑布流式的文章列表

瀑布流式的文章列表

利用模态框直接显示文章正文

点击瀑布流的某个文块后,直接在当前页面弹出模态框来显示正文以及文章相关内容,可依稀透过模态框背景看到底层的瀑布流。点击模态框背景可关闭模态框,相当于回到瀑布流。
利用模态框直接显示文章正文

平常的开始

其时,我正痴迷于MVVM框架avalon,于是,理所当然地用avalon来渲染瀑布流的DOM树。至于文章正文嘛,就用avalon给瀑布流中的各文块绑定个click事件,顺便把文章id给传到click事件的callback里,执行callback时就ajax读一下文章正文,最后放到模态框里显示就是了。
至此,老板要的“用户体验”就达成了,老板夸我厉害还给我涨工资,我心里美美哒 n(≧▽≦)n

问题初现

官网上线了几天,老板给我提出了一个非常“实际”的问题,他没法把文章的网址分享出去呀,这是因为:官网本来就没有独立的文章页面,更勿论文章的网址了!。当务之急是创建出可供分享的文章网址。

Hashbang登场

老板不接受“跳转新页面”打开文章正文的方案,坚持一定要瀑布流+模态框,我只好琢磨别的思路了。首先我试用window.location.href="/article/1",这是一定会使浏览器跳转而无法保持在当前页面的,pass。接下来我查资料就搜到这Hashbang的方案:利用改变锚点#不会导致页面跳转这一特点,并加上!这一独特的标识,形成形如http://aiispo.cn/#!/article/1的网址。

具体的方案是这样的:

  1. 大体上跟最初的方案一致。
  2. 不一样的地方在于,打开模态框的同时window.location.href="/#!/article/1",这时地址栏的地址便变为http://aiispo.cn/#!/article/1,也能保持不跳转。
  3. 另外,给document.load绑上callback,也就是在页面加载好后取当前的hash(window.location.hash),会得到形如#!/article/1的字符串。正则匹配该字符串把文章ID取出,就可以直接显示文章正文了。
  4. 在关闭模态框时,应把地址栏恢复回来。

如此一来,用户在阅读文章时地址栏里的正是文章的“网址”,而当用户把网址分享给别人,别人复制到浏览器一打开,就能看到那篇文章了。老板又夸我了,我心里又美美哒 n(≧▽≦)n

问题再现

官网上线月余,百度仅收录了首页,我打开首页的快照一看,可只有avalon的模板标签,我一下子就醒悟过来了:百度根本就没能爬到任何的文章,因为首页根本没有任何文章的链接!
这时候我才意识到在SEO方面出了大问题了,这对一个新媒体网站来说可是致命的呀,把问题报告老板后就赶紧开动脑筋想解决方案了。

小尝试

把心一横,把原本用avalon渲染的瀑布流,全部改回用PHP来渲染,同时给瀑布流的文块加上<a>标签,例如<a href="/#!/article/1">。由于加上了<a>标签,地址栏就不需要手动去改了。

问题未解

又过了几天,各个搜索引擎还是没有动静,我便又开始查资料:原来,国内的搜索引擎在抓取页面的时候,是不执行js的。换句话说,搜索引擎从http://aiispo.cn/#!/article/1这样的网址进去,只能看到瀑布流而看不到文章正文,因为文章正文是后面用js渲染的,不执行js就没法渲染,而瀑布流是用PHP渲染成html的,搜索引擎能看得到。据说Google是会执行js的,不过作为一个国内的网站,还是得优先保证国内的搜索引擎。

Html5 History Api

思量良久,问题还是出在文章没有独立的页面上,另外Hashbang这种URL也不可靠,无法被后端识别。痛定思痛,这次一定要彻底解决问题。

改造如下:

  1. 仿照模态框的UI,我给做了文章的独立页面,URL形如http://aiispo.cn/article/1
  2. Hashbang不成,我就找其它能修改地址栏但不跳转的方案,结果就找到了Html5 History Api

    1. 把瀑布流文块里的<a href="/#!/article/1">改为<a href="/article/1">
    2. 改这href会导致用户点击后跳转,因此需要用js拦截<a>不让其跳转,并改为用window.history.pushState()来设置地址栏,此时用户的地址栏应为http://aiispo.cn/article/1
    $('#article-list a').on('click', function() {var url = $(this).attr('href');window.history.pushState(null, null, url);return false;
    });
    1. 照样用正则匹配出文章ID,并用模态框显示文章正文。

如此一来,便兼顾了三方的需求:

  1. SEO的需求,搜索引擎抓取瀑布流能抓到文章独立页面的URL(形如http://aiispo.cn/article/1),通过此URL进入文章独立页面能抓取到文章正文。
  2. 用户体验的需求,完美地保留了瀑布流+模态框的阅读模式。
  3. 用户分享文章网址的需求,用户在瀑布流打开文章时,地址栏正是文章独立页面的URL。

兼容性修正

上述方案依赖于Html5 History Api,而IE9及以下版本都是不支持Html5 History Api的,需要进行兼容性修正。
在权衡利弊后,最终决定放弃IE9-用户的用户体验

  1. 检测当前浏览器是否支持Html5 History Api
  2. 不支持的话,就不拦截瀑布流文块的<a href="/article/1">,也就是直接让其跳转。

总结

我的这套方案,本质上跟Prerender没有区别,都是让后端模拟前端渲染的方式生成一个独立的页面供搜索引擎抓取,既兼顾用户体验,又不失SEO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_800363.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站性能优化途径

性能优化途径 Web前端性能优化 1.浏览器访问优化 减少http请求 合并css&#xff0c;合并js&#xff0c;合并图片使用浏览器缓存启用压缩CSS放在页面最上面&#xff0c;JS放在页面最下面&#xff08;浏览器会在下载完CSS之后才对整个页面进行渲染。JS则相反&#xff0c;浏览器加…

如何添加360浏览器(chrome)添加JavaScript例外,禁止网站加载JS

注意&#xff1a;通配符两侧的[]不能省略 本文转自黄聪博客园博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/huangcong/p/4903422.html&#xff0c;如需转载请自行联系原作者

微信扫码登录网站

微信开放平台&#xff1a;https://open.weixin.qq.com 1231. 第三方发起微信授权登录请求&#xff0c;微信用户允许授权第三方应用后&#xff0c;微信会拉起应用或重定向到第三方网站&#xff0c;并且带上授权临时票据code参数&#xff1b;2. 通过code参数加上AppID和AppSecret…

tomcat出现404的原因_导致网站出现404页面的原因有哪些?

在运营网站的时候&#xff0c;SEO人员会经常遇到404错误页面&#xff0c;当网站出现404错误页面的时候&#xff0c;不仅会影响搜索引擎的友好性&#xff0c;同时也会影响用户体验&#xff0c;导致网站流量损失&#xff0c;网站跳出率也会增加。 那么&#xff0c;导致网站出现40…

inshot怎么转gif_这几个高效办公网站,帮你搞定PDF、gif转换难题

适用系统&#xff1a;PC(可以直接在浏览器上搜索)每天淹没在各种文件、图片中&#xff0c;每次最头疼的莫过于转换格式&#xff0c;gif图片过大等问题&#xff0c;不是在找转换工具的路上&#xff0c;就是在转换文件当中。一不留神&#xff0c;又加入了加班大部队中。。。求人不…

浏览器排名_五大优化方式 让你的排名不再过山车谷歌浏览器seo插件

搜寻引擎改进&#xff0c;牵涉到的细节不世之功多&#xff0c;开始我要澄清的是&#xff1a;现阶段短文&#xff0c;枝末生根不世之功细节的去讲悉数些改进知识点。这地方说的分解指的是&#xff1a;用户名使得一步到位的寻找必必需的数据&#xff0c;蝙蝠使得一步到位的罢休更…

使用CDN网站加速的好处

2019独角兽企业重金招聘Python工程师标准>>> 网站使用CDN网站加速后&#xff0c;可以达到下面一些效果。 一、网站页面加速&#xff1a;将用户网站的静态资源如图片、html、css、js等分发到TTCDN全网服务节点上&#xff0c;通过智能调度系统使用户访问距离最近的节点…

jQuery Mobile手机网站案例

jQuery Mobile手机网站案例 一、总结 一句话总结&#xff1a;jQuery Mobile是纯手机框架&#xff0c;和amazeui和bootstrap都可以做手机网站。 1、另一款文本编辑器&#xff1f; jd编辑器 二、jQuery Mobile手机网站案例 1、index.php 1 <?php 2 include common/config.php…

iOS应用打包完后再在开发者网站添加应用测试ID能够加入测试吗

1、明确指出 不行&#xff1a; 1、打包测试包前一定要先添加测试设备的UDID2、添加测试的设备UDID一定要先于打包测试包&#xff0c;否则设备无法参加测试3、使用蒲公英分享测试包&#xff0c;查看可参加测试的设备UDID2、上传与查看步骤 2.1 上传 登陆网站按照提示操作2.2 查看…

使用 Web 服务 为 ECS Linux 实例配置网站及绑定域名

Nginx 服务绑定域名 以 YUM 安装的 Nginx 为例&#xff1a; 执行命令 vi /etc/nginx/nginx.conf 编辑 Nginx 的配置文件&#xff0c;将默认的server {...} 配置修改为以下内容&#xff1a; server { listen 80 default_server; server_name www.123.com; root /home/web1; loca…

python 网站的结构

用python怎么做一个网站。 维基百科对网站有如下描述&#xff1a; 网站&#xff08;英文&#xff1a;Website&#xff09;是指在互联网上&#xff0c;根据一定的规则&#xff0c;使用HTML等工具制作的用于展示特定内容的相关网页的集合。简单地说&#xff0c;网站是一种通信工具…

IIS发布网站、发布webservice的重要说明

本文主要讲IIS发布网站、发布webservice的重要步骤、注意事项。 一、IIS发布网站、发布webservice 1.打开IIS管理器&#xff0c;如下图 2.在【网站】上点击右键&#xff0c;添加网站&#xff0c;设置如下图&#xff1a; 如果需要使用域名访问网站&#xff0c;则必须先购买域名并…

php特级课---3、常用的网站加速技术有哪些

php特级课---3、常用的网站加速技术有哪些 一、总结 一句话总结&#xff1a;网站加速技术是一组技术的组合&#xff0c;来提升网站的速度 1.Squid代理缓存技术 2.页面静态化缓存 3.Memcache 4.Sphinx搜索加速 1、squid的作用是什么&#xff08;squid动静分离&#xff09;&#…

web网站通知系统设计

写在前面&#xff1a; 通知系统是网站信息传播机制的重要的一部分&#xff0c;足够写一大章来说明。本文只梳理设计原则&#xff0c;后续相关内容会持续更新。 这里的通知包括但不限于公告、提醒或消息&#xff08;不同使用场景下的功能定义不同&#xff09;。 关于各客户端平台…

使用SHTML更好的维护门户网站(转)

< DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> 转自&#xff1a;http://blog.breakn.net/article.asp?id266目前为部分访问量大的页面自动生成HTML的方式&#xff0c;不过一些很多页面都要用到的菜单什么的如果要改就…

KindEditor 上传漏洞致近百个党政机关网站遭植入

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 2月21日消息&#xff0c;近日&#xff0c;安恒明鉴网站安全监测平台和应急响应中心监测发现近百起党政机关网站被植入色情广告页面&#xff0c;分析发现被植入色情广告页面的网站都使用了 KindE…

一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户...

下面将记录每一步的实现过程。1、首先我们打开前面文章中创建的工程&#xff0c;以设计模式打开Register.aspx&#xff0c;选中CreateUserWizard控件&#xff0c;然后在右边的点击Properties&#xff0c;在Properties窗格的工具栏上点击Events图标&#xff0c;双击CreatedUser&…

SEO实战干货:网页建库与未建库的标准规则!

很多SEO人稍微有点基础就都知道降权这个词语&#xff0c;但是在搜索引擎规范标准指南里面并未提到站点降权一说&#xff0c;严格来讲用建库这个说法更加准确。首先我们不妨来回顾一下搜索结果排序的过程&#xff0c;从蜘蛛的爬行到蜘蛛的抓取再到网页收录(这里面包括了页面纯收…

使用Bootstrap 3开发响应式网站实践05,使用Tab、Modal、Form展示内容,使用Popover、Tooltip展示提示信息...

本篇体验用Tab插件显示内容。Html部分为&#xff1a;<div class"row" id"moreInfo"><div class"col-sm-6"><h3>兰帕德宣布退出英格兰队</h3><div class"tabbable"><ul class"nav nav-tabs"…

React学习网站

2019独角兽企业重金招聘Python工程师标准>>> 1.W3cschool的中文版学习网站 https://www.w3cschool.cn/react/react-components.html 2.英文版官网学习网站 https://reactjs.org/docs/hello-world.html 转载于:https://my.oschina.net/korabear/blog/1817625