浅谈在不使用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 相关文章推荐
关于document.cookie的使用javascript
Oct 29 Javascript
jQuery 中使用JSON的实现代码
Dec 01 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
jquery 操作css样式、位置、尺寸方法汇总
Nov 28 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
javascript实现简单的on事件绑定
Aug 23 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
JavaScript 闭包详细介绍
Sep 28 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
基于axios封装fetch方法及调用实例
Feb 05 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 MemCached 高级缓存应用代码
2010/08/05 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
JQuery从头学起第一讲
2010/07/04 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
js创建对象的方式总结
2015/01/10 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
怎样使用Python脚本日志功能
2016/08/14 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
党委班子对照检查材料
2014/08/19 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
恰同学少年观后感
2015/06/08 职场文书