vue网站SEO优化持续踩坑(PhantomJS)

事情是这样的

最近公司需要做一个网页导航 集成文章功能的网站,不想重复造轮子,于是乎就在gitee上扒了一个开源的项目来改造。项目前端架构是vue+elementui。
千辛万苦在项目收尾阶段,老板突然说网站要做SEO。到时没多想,就觉的不就是seo嘛,加上关键字、描述标题不就完事了,然后项目匆匆上线了。过了一阵子才不慌不忙的开始着手seo的事,当我在浏览器右键查看网站源码的时候,傻眼了,整个网站的body里只有一个醒目的div,如下

<body>
  <div id="app"></div>
</body>

WTF...
才想起来,vue页面是在前端渲染的,果断度娘了一波,一大片说vue不友好之类的,看完我差点昏厥。
好在遇到同样问题的不止我一个,找到了一些vue项目做seo优化的解决方案,于是乎我顺着前人的脚步,一步步开启了我的seo踩坑之旅。

选方案

网上找到的方案大致分四类,包括SSR服务器渲染,静态化以及服务器无头浏览器等,优劣不一,各有千秋,笔者综合考虑自身情况,选择最后一种,用PhantomJs针对爬虫做处理。
详细请参考:http://www.fly63.com/article/detial/3960

PhantomJs初使用

Phantomjs是一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。这种解决方案其实是一种旁路机制,原理就是通过Nginx配置,将搜索引擎的爬虫请求转发到一个node server,再通过PhantomJS来解析完整的HTML。
这里有一个方案可参考:https://www.jianshu.com/p/2bbbc2fcd16d

但是笔者按照上述方案操作的时候,会报一个Cannot find module 'express'的错误,查了一下,是需要安装express。
自己当时太菜,并不知道express是个什么鬼,所以选了另外一种方法,在github上找了一套别人打包好的vue-seo-phantomjs

按照上述操作,最后执行

phantomjs spider.js 'https://wj.qq.com/'

的时候,成功出现网站的html信息了。
但是仔细一看,发现还是没有渲染的页面,报错信息是

phantonjs ReferenceError: Can't find variable: Promise

Promise的坑

老办法,找度娘...
笔者在这一块卡了一上午时间,踩了很多坑,甚至硬着头皮查阅了老外的讨论和笔记https://github.com/ariya/phantomjs/issues/12401
最后大概了解,应该是还差一个Promise的依赖。
解决办法:在你的vscode(就是你的开发工具)的终端输入

npm install es6-promise --save

然后在你项目的js中加入一串代码

import Promise from 'es6-promise'
Promise.polyfill()

笔者是加在项目的main.js里,然后重新打包,部署,最后终于看见了渲染后的页面,激动的眼眶都红了

等等,还没结束呢。到这一步,可能大部分朋友已经OK,但是可能部分小朋友的项目的代码写的不规范,或者滥用组件的原因,导致用phantomjs渲染的时候报错,这时,就要根据报错信息逐个解决,一般报错信息是在你执行 phantomjs spider.js '你的url' 之后会打印出来。
在此笔者会列出自己遇到的问题

URLSearchParams 坑

报错信息:

[root@VM-0-10-centos phantomjs]# phantomjs spider.js 'http://106.52.91.112:9527/#/info?blogUid=fc654f40718341ef01edf13ce71f1fea'
[Vue warn]: Error in created hook: "ReferenceError: Can't find variable: URLSearchParams"

found in

---> <Info>
       <Index>
         <App>
           <Root>

  https://cdn.bootcdn.net/ajax/libs/vue/2.5.17/vue.js:597 in warn
ReferenceError: Can't find variable: URLSearchParams
解决办法1

弃用URLSearchParams。在vue项目中,注释所有URLSearchParams相关用法,采用直接传匿名对象

          // var params = new URLSearchParams();
          // params.append("uid", this.blogUid);
          getBlogByUid({uid: this.blogUid}).then(response => {
            if (response.code == this.$ECode.SUCCESS) {
              this.blogData = response.data;
            }
            setTimeout(()=>{
              that.blogContent = response.data.content
              that.loadingInstance.close();
            }, 200)
          });

Nginx配置

upstream spider_server {
    server localhost:8081;
}
server {
    listen       80;
    server_name  www.lidh.vip;
    
    location / {
      proxy_set_header  Host            $host:$proxy_port;
      proxy_set_header  X-Real-IP       $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

      if ($http_user_agent ~* "Baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator|bingbot|Sosospider|Sogou Pic Spider|Googlebot|360Spider") {
        proxy_pass  http://spider_server;
      }
      
      # vue项目路径
      root   /opt/proj/kehai/goxp_nav/vue_web/dist;
      index  index.html index.htm;
    }
}

结束语

小菜鸟笔者的踩坑日常,让大佬见笑了,本文旨在帮助那些遇到同样问题的人能避免入坑,因为自己在这个坑花了太久时间,然后网上也没有找到很好方法,故希望此文能帮到需要的人

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335