浅谈在不使用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有关的小细节
Apr 02 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
May 31 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
React Native如何消除启动时白屏的方法
Aug 08 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
浅谈vue后台管理系统权限控制思考与实践
Dec 19 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
Feb 02 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
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
PHP实现文件上传与下载
2020/08/28 PHP
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
javascript自执行函数
2017/02/10 Javascript
babel基本使用详解
2017/02/17 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Django 路由系统URLconf的使用
2018/10/11 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
Python assert关键字原理及实例解析
2019/12/13 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
志愿者活动总结
2014/04/28 职场文书
田径运动会通讯稿
2014/09/13 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
学校通报表扬范文
2015/05/04 职场文书
永不妥协观后感
2015/06/10 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python