浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)


Posted in Javascript onNovember 08, 2018

上一篇说了vue单页面解决解决SEO的问题

只是用php预处理了meta标签

但是依然没有内容填充,所以对于内容抓取依然有些乏力,只是解决了从无到有的问题

那接下来可以更进一步的预填充内容了

预填充内容

这里依然使用php来实现

首先在php中拉取需要填充的数据,列表或是具体内容

修改拉取数据部分

$urlExp = explode('/',$_SERVER['REQUEST_URI']);
if(count($urlExp)>2 && $urlExp[1] == 'article'){
  //文章页拉取内容
  $ret = @json_decode(http_Req('http://127.0.0.1/api/Blog/getsinglelist',['tuid'=>$urlExp[2]],'POST'),true);
  if($ret){
    $valKeywords = $ret['info'][0]['tt'].','.$valKeywords;
    $valDescription = $ret['info'][0]['txt'].' - '.$valTitle.','.$valDescription;
    $valTitle = $ret['info'][0]['tt'].' - '.$valTitle;
    $info = $ret['info'][0]['info'];
    $textData = @file_get_contents("你的文章路径") ?? $valDescription;
  }else{
    $textData='none';
  }
}

if(!$textData){
  //列表页拉取列表
  $ret = @json_decode(http_Req('http://127.0.0.1/api/Blog/getlist',['page'=>1,'type'=>0],'POST'),true);
  if($ret){
    $textData = '';
    foreach ($ret['info'] as $key=>$val) {
      $textData.='标题:'.$val['tt'].'.';
      $textData.='描述:'.$val['txt'].'.';
      $textData.='创建时间:'.$val['ctime'].'.';
      $textData.='浏览次数:'.$val['fl'].'.';
    }
  }
}

然后在html部分输出相关内容

在body下放一个div,并且隐藏掉他

<div class="pre-view" style="position:absolute;z-index: -99999;opacity: 0;top: -9999px;left: -9999px">
  <?php echo $textData; ?>
</div>

这样爬虫就可以抓取到我们的内容并且不影响前端渲染

优化vue构建

之前的构建是在构建完成后修改html为php,有点蠢

这里改下webpack的配置就好了

修改 build/webpack.prod.conf

new HtmlWebpackPlugin({
 filename: config.build.index,
 //这里改为index.php
 template: 'index.php',
 inject: true,
 minify: {
  removeComments: true,
  collapseWhitespace: true,
  removeAttributeQuotes: true
  // more options:
  // https://github.com/kangax/html-minifier#options-quick-reference
 },
 // necessary to consistently work with multiple chunks via CommonsChunkPlugin
 chunksSortMode: 'dependency'
}),

修改 config/index.js

build: {
 // Template for index.html
 // 这里改为index.php
 index: path.resolve(__dirname, '../dist/index.php'),

 // Paths
 assetsRoot: path.resolve(__dirname, '../dist'),
 assetsSubDirectory: 'static',
 assetsPublicPath: 'http://cdn.linkvall.cn/',

 productionSourceMap: true,

 devtool: '#source-map',

 productionGzip: false,
 productionGzipExtensions: ['js', 'css'],

 bundleAnalyzerReport: true
}

这样构建时候的入口文件就变成index.php,构建完成的页面入口也为index.php

最终效果

等爬虫更新后就搜到我们的文章了

浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)

写在最后

  • 目前还是用php来实现主要是实现起来比较简单,对于像我一样后端是php的比较友好
  • 如果再使用node去监听个端口的话需要额外开销和额外的精力去维护
  • 如果后端是纯node的当然用node或者直接配置个SSR更好
  • 关于首页渲染问题推荐是用骨架屏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 提交和设置表单的值
Dec 19 Javascript
为你的网站增加亮点的9款jQuery插件推荐
May 03 Javascript
Javascript中产生固定结果的函数优化技巧
Jan 16 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
Dec 26 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
微信小程序  http请求封装详解及实例代码
Feb 15 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
Apr 01 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
Websocket 向指定用户发消息的方法
Jan 09 Javascript
基于vue.js实现购物车
Jan 15 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
详解在不使用ssr的情况下解决Vue单页面SEO问题
Nov 08 #Javascript
Vux+Axios拦截器增加loading的问题及实现方法
Nov 08 #Javascript
Angular设置别名alias的方法
Nov 08 #Javascript
vue-cli安装使用流程步骤详解
Nov 08 #Javascript
vue项目动态设置页面title及是否缓存页面的问题
Nov 08 #Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 #Javascript
Vue实现简易翻页效果源码分享
Nov 08 #Javascript
You might like
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
教你如何把一篇文章按要求分段
2006/10/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
Jquery之美中不足小结
2011/02/16 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
python如何使用unittest测试接口
2018/04/04 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
Python pip 常用命令汇总
2020/10/19 Python
Internet体系结构
2014/12/21 面试题
中学老师的自我评价
2013/11/07 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
信访工作汇报材料
2014/10/27 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫