浅谈在不使用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 相关文章推荐
javascript分页代码(当前页码居中)
Sep 20 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
Dec 11 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
Apr 08 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
js字符串操作总结(必看篇)
Nov 22 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
Apr 28 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 Javascript
javascript History对象原理解析
Feb 17 Javascript
node+vue实现文件上传功能
May 28 Javascript
详解在不使用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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python网页解析器使用实例详解
2020/05/30 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
护士的岗位职责
2013/12/04 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL