vue无需改动代码的SEO优化【百度收录问题】优化--puppeteer(详细流程)

2 篇文章 0 订阅
订阅专栏
1 篇文章 0 订阅
订阅专栏
1 篇文章 0 订阅
订阅专栏

vue无需改动代码的SEO优化–puppeteer(详细流程)

目录

  • vue无需改动代码的SEO优化--puppeteer(详细流程)
  • 概念
  • 一、安装puppeteer:npm install puppeteer --save
    • 安装依赖
  • 二、编写puppeteer服务js文件
    • puppeteer-pool.js 性能优化,去除不必要的功能,提高性能。
    • spider.js渲染请求的页面
    • server.js,通过express 开启一个服务器。接受转发的请求
    • nginx配置
  • 三、测试puppeteer配置

概念

Puppeteer 是一个node库,他提供了一组用来操纵Chrome的API, 通俗来说就是一个 headless chrome浏览器 (当然你也可以配置成有UI的,默认是没有的)。

SEO优化,主要是为了解决百度收录问题,实现原理就是我们首先去访问nginx,nginx转发到puppeteer服务,由puppeteer服务模拟浏览器请求获取数据,然后返回到页面。这样可以达成直接返回html的效果了。如下图:

puppeteer服务调用流程

一、安装puppeteer:npm install puppeteer --save

npm install puppeteer --save

执行完会后会再当前目录下载一个node_modules文件夹,在执行命令时可以切换到自己想要下载的目录下载,如:cd /uer/local/ 之后再执行npm install 的命令

安装依赖

# 依赖库
yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y

# 字体
yum install ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y

将下面这段代码保存为 index.js ,然后运行 node index.js 就可以在根目录下得到一个 example.png 的截图。(用于验证puppeteer是否安装成功)

const puppeteer = require('puppeteer');

(async () => {

  const browser = await puppeteer.launch({
      args: [
          '--no-sandbox',
          '--disable-setuid-sandbox',
      ]
  });
  const page = await browser.newPage();
  await page.goto('https://www.baidu.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

在安装完这些依赖后 我在启动下面的js时还是提示缺少库。如果不缺少可以跳过这里。(检查凡是就是执行上面的js是否报错)
如:在调用chrome的时候缺少libdrm.so.2库

error while loading shared libraries: libdrm.so.2: cannot open shared object file:

可以执行如下命令查看还缺那些库 ,cd后面是路径 一般报错里会有自己的路径。

 cd /xxx/xxx/puppeteer/chrome/linux-xxx/chrome-linux/
ldd chrome

执行完 ldd chrome命令
结果如下:

linux-vdso.so.1 => (0x00007fffd5fb6000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000379e200000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000000393f200000)
libpcre.so.0 => /lib64/libpcre.so.0 (0x00000033d5800000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x0000003c60200000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x0000003df9800000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000390be00000)
libz.so.1 => /lib64/libz.so.1 (0x0000003a25600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003a24200000)
libdrm.so.2 => not found
/lib64/ld-linux-x86-64.so.2 (0x0000003a23e00000)
libfreebl3.so => /lib64/libfreebl3.so (0x000000393ea00000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000000379fa00000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x000000379d200000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x000000379e600000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x0000003df9c00000)
…………
可以看出来缺少的库的名字和是否缺少其他库【libdrm.so.2 => not found 】
找到缺少的库之后只需要执行yum install 库名就可以了:

 yum install libdrm*

二、编写puppeteer服务js文件

可以先新建一个目录如:puppeteer_project

mkdir puppeteer_project

文件目录结构
在这里插入图片描述
**注意:**文件名最后不要随意改,因为相互之间有引用,要改文件名其他引用这个文件的地方也需要改。

puppeteer_project
	 --puppeteer-pool.js
	--spider.js
	--service.js

puppeteer-pool.js 性能优化,去除不必要的功能,提高性能。

const puppeteer = require('puppeteer')
const MAX_WSE = 2; //启动几个浏览器 
let WSE_LIST = []; //存储browserWSEndpoint列表
//负载均衡
(async () => {
	for (var i = 0; i < MAX_WSE; i++) {
		const browser = await puppeteer.launch({
            //无头模式
			headless: true,
            //参数
			args: [
				'--disable-gpu',
				'--disable-dev-shm-usage',
				'--disable-setuid-sandbox',
				'--no-first-run',
				'--no-sandbox',
				'--no-zygote',
				'--single-process'
			]
		});
		browserWSEndpoint = await browser.wsEndpoint();
		WSE_LIST.push(browserWSEndpoint);
	}
})();

module.exports = WSE_LIST

spider.js渲染请求的页面

const puppeteer = require('puppeteer')
const WSE_LIST = require('./puppeteer-pool.js')
const spider = async (url) => {
	
	let tmp = Math.floor(Math.random() * WSE_LIST.length);
	//随机获取浏览器
	let browserWSEndpoint = WSE_LIST[tmp];
	//连接
	const browser = await puppeteer.connect({
		browserWSEndpoint
	});
	//打开一个标签页
	var page = await browser.newPage();
	//打开网页
	await page.goto(url, {
		timeout: 0, //连接超时时间,单位ms
		waitUntil: 'networkidle0' //网络空闲说明已加载完毕
	})
	//获取渲染好的页面源码。不建议使用await page.content();获取页面,因为在我测试中发现,页面还没有完全加载。就获取到了。页面源码不完整。也就是动态路由没有加载。vue路由也配置了history模式
	var html = await page.evaluate(() => {
		return document.getElementsByTagName('html')[0].outerHTML;
	});

	await page.close();

	return html;
}

module.exports = spider;

server.js,通过express 开启一个服务器。接受转发的请求

var express = require('express');
var app = express();
var spider = require("./spider.js")
var minify = require('html-minifier').minify;
app.get('*', async (req, res, next) => {
	// 部署到服务器的完整URL
	 var url = req.protocol + '://'+ req.hostname + req.originalUrl;
	console.log('请求的完整URL:' + url);
	var content = await spider(url).catch((error) => {
		console.log(error);
		res.send('获取html内容失败');
		return;
	});
    //由于是直接获取的源码,下面通过minify库压缩代码,也不知道是不是多余的。
	content=minify(content,{removeComments: true,collapseWhitespace: true,minifyJS:true, minifyCSS:true});
	res.send(content);
});
//监听4000端口
app.listen(4000, () => {
	console.log('预渲染服务已启动!');
});


引用js的下载,要不然可能找不到方法【 code: ‘MODULE_NOT_FOUND’,】

npm install express --save
npm install html-minifier --save

执行启动puppeteer命令

node server.js 
或 
node server.js &

后面带&的是后台运行,不带&的启动命令可以用来看日志,访问的链接会打印出来。
相当与启动了一个端口为4000的puppeteer服务。
启动的时候可能端口占用 4000被占用的话就换一个其他端口。

在这里插入图片描述

nginx配置


server {
      listen       80;
      server_name  xxx.com localhost;

  location / {
      # 蜘蛛爬虫处理
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      if ($http_user_agent ~* "spider|bot") {
           proxy_pass http://localhost:4000;
      }

      try_files $uri $uri/ @router;
  }
  location @router {
      rewrite ^(.*)$ /index.html last;
  }
}

修改完nginx conf文件之后可以执行

nginx -t

检查配置是否格式正确,正确的话结果如下 最后有successful

nginx: the configuration file /xxx/xxx/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /xxx/xxx/nginx/conf/nginx.conf test is successful

之后再执行重启nginx即可。

 nginx -s reload

注意

三、测试puppeteer配置

可以使用postman调用接口测试
headers里要加配置模仿爬虫参数。

User-Agent:spider

测试puppeteer配置
刚刚启动puppeteer(service.js)的时候访问可能比较慢,大几秒左右,启动半分钟左右再调用就会快一些,大概3秒能返回数据。具体访问速度可能和不同服务器有关。

测试日志如下:
在这里插入图片描述

参考资料:
Vue项目无需修改任何代码,就可实现SEO优化!

如发现文章问题,欢迎评论或私信指出问题。

如果这篇文章对您有帮助的话,可以点赞鼓励一下,谢谢!

VUE项目SEO问题的解决
MiemieWan的博客
12-21 1万+
一.SEO及网站渲染 SEO(Search Engine Optimization):汉译为搜索引擎优化。利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。 网站的渲染本质一样,都是字符串拼接,将数据渲染进一些固定格式的html代码中形成最终的html展示在用户页面上。拼接字符串必然引起性能的消耗。 1.「后端渲染」指传统的 ASP、Java 或 PHP 的渲染机制; 浏览器...
sparender:基于puppeteer的高性能SPA SEO解决方案
05-29
这是什么? 这是一个高性能的基于puppeteer的SSR方案, 他使用Headless Chrome从网页中生成html,然后以http的方法返回html内容 解决了什么问题 很多公司和开发者使用JavaScript框架(包括AngularJS,BackboneJS,ReactJS, VueJS)开发应用程序和网站。但很多搜索引擎,社交媒体,爬虫不支持抓取JavaScript的网页,也就无法做网站SEO。 通过UserAgent判断,如果是来自于爬虫, 则通过nginx(tomcat, Apache)等反向代理到本服务,则可以把渲染好的html网页内容传递给搜索引擎, 从而间接实现SEO,, 从而间接实现 SEO, 这样,既可以保持纯粹的前端开始思路, 还能节省 SSR 造成的服务器负担 也可以使用在爬虫采集, 生成网页截图,生成网页PDF场景 使用 git clone cd spa
Vue puppeteer插件安装问题解决方案
最新发布
FL06052146的博客
03-09 499
说明:以下三种解决思路,亲测均不可用。
vue-cli3 从搭建到优化详细步骤
01-19
前言 github地址: https://github.com/LeeStaySmall/vue-project-demo (完整分支:optimize分支) demo地址: vue-project-demo.eloco.cn 安装与初始化架构 安装 node >= 8.9 推荐:8.11.0 + 安装: npm install -g @vue/cli 检查: vue --version 如果已安装旧版本,需要先 npm uninstall vue-cli -g 卸载掉旧版本。 初始化架构 创建: vue create project-name 注:项目名称不能驼峰命名。 选择一个预设
详解使用vue-admin-template的优化历程
08-27
主要介绍了详解使用vue-admin-template的优化历程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
vue-cli 首屏加载优化问题
01-19
使用 vue-cli构建的项目,在 默认情况下 ,执行 npm run build  会将所有的js代码打包为一个整体, 打包位置是 dist/static/js/app.[contenthash].js   类似下面的路由代码 router/index.js 路由相关信息,该路由文件引入了多个 .vue组件 import Personal from '@/components/page/Personal' import Message from '@/components/personnal/Message' import Settings from '@/components/perso
vueseo优化
热门推荐
kang_k的博客
09-03 6万+
前言 先了解什么是seo? 再了解搜索引擎蜘蛛的工作原理? seo为啥对vue单页面不友好? vue项目怎么做seo优化? prerender-spa-plugin怎么使用,以及它的工作原理 什么是seoSEO是由英文Search Engine Optimization缩写而来, 中文意译为“搜索引擎优化”。SEO是指通过对网站进行站内优化和修复(网站Web结构调整、网站内容建设、网站代码...
vueSEO优化
GQDD99的博客
06-16 1411
vue开发的都是单页面应用,相比多页面应用有避免共用资源重复加载、局部刷新更改、页面切换快、用户体验好、转场动画容易实现、维护成本低等优点,但是也有SEO优化困难,开发成本高需要借助专业框架等缺点,为解决seo优化问题,有ssr(服务端渲染)和预渲染两种解决方案。
尝试 vue 实现 SEO
春江水暖丫先知
12-03 2705
首先说下原理phantomjs 是可以部署在服务端的 无头浏览器, 也可以用来做爬虫pm2 是 服务托管nginx 作为服务端以及事务转发利用nginx判断是否是爬虫访问, 将phantomjs 生成的 数据 返回. pm2 则用作托管phantomjs;那么就开始了.... 查了很多资料. 慢慢的在摸索..2022-11-3 小计。
puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名
qq_45840993的博客
05-15 1716
puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名
什么是seovue中如何优化seo
day day up
10-26 2253
SEO在国内主要运用于百度,在国内我们做seo也主要针对百度,我们的seo技术人员是通过一些手段将一些搜索量非常高的关键词优化百度的快照位置,使得用户在百度上搜索这类关键词的时候,能快速有效的找到这类优质的网站。SEO简单的说就是通过一系列的手段,使得网站的代码以及内容都符合相关搜索引擎的规则,让搜索引擎有效的抓取内容,使得网站的内容能够通过这些搜索引擎,展现到用户面前。这些搜索引擎都可以抓取网站的内容,而seo的作用就是让网站的内容能够被这些搜索引擎抓取并且被释放出来。
详解vue-cli + webpack 多页面实例配置优化方法
01-19
本文介绍了vue-cli + webpack 多页面实例配置优化方法,分享给大家 vue+webpack是否有多页面 目前使用vue来做项目,估计大部分都是单页面(SPA)应用,一个轻型的 MVVM 框架,谁用了MVVM框架,就再也回不去JQ时代...
VUE预渲染遇到的坑
wangshu696的专栏
07-27 5736
  遇到的问题 1.下载prerender-spa-plugin 失败解决方案 我更新prerender-spa-plugin   发现运行 下去都是  error报错 安装不成功, 但是他会提示你对downloading  什么文件  保存到哪个位置对吧, 把   他提示着  这个在浏览器 输入,我的是下面这个   //windows http://github.com/Me...
Puppeteer 实战场景 —— 生成 PDF
夏狗花花的博客
07-24 1544
给单个 HTML 生成 FDP 这里拿 Vue 文档为例,把文档的介绍页转存为 pdf 。注意,生成PDF只支持无界面的操作,headless 必须为 true const puppeteer = require('puppeteer'); puppeteer.launch({ headless:true, //生成PDF只支持无界面的操作!(我刚开始调试设了 flase ,一直报错哈哈哈) defaultViewport:{ width:1920, hei
vue 解决seo优化之预渲染prerender-spa-plugin
huangpb的博客
12-26 1550
最全、最详细的解释请看prerender-spa-plugin 插件 Github 解决SEO(Search Engine Optimization),首屏问题 , 页面较少,且预渲染相对于SSR比较简单,预渲染可以极大的提高网页访问速度。而且配合一些meat插件,完全可以满足SEO需求。 预渲染流程 预渲染原理 在webpack打包结束并生成文件后(after-emit hook),会启动一个server模拟网站的运行,用puppeteer(谷歌官方的 headless 无头浏览器)访问.
Vue SEO解决方案
永别京华
05-06 3509
目录SEO是什么SEO目的Vueseo的解决方案 SEO是什么 seo是一种网站优化技术,也被叫做搜索引擎优化,可以利用搜索规则提高网站上有关搜索的自然排名,主要表现为微博热搜控榜等。通过seo技术,可以实现一系列的商业行为,对产品品牌进行宣传收益。 简单来说:它是 搜索引擎优化 SEO目的 达成广告点击 销售产品/服务 提升品牌建设 Vueseo的解决方案 方案一:prerender-spa-plugin 这里用的是 vue-cli 4.5 + Vue2 使用 vue ui 进入图
关于Vue项目的SEO问题
qq_45532769的博客
10-24 949
搜索引擎优化(Search engine optimization,简称 SEO ),指为了提升网页在搜索引擎自然搜索结果中(非商业性推广结果)的收录数量以及排序位置而做的优化行为,是为了从搜索引擎中获得更多的免费流量,以及更好的展现形象。通俗点,就是百度、Google等这些搜索引擎会爬我们网站的内容,用户通过搜索某个关键字的时候,我们的网站对应的页面就有机会会显示出来。
Vue解决SEO的方案
szr190的博客
08-25 1278
代码Vue解决SEO的方案。
Vue SEO的四种方案
开源世界
12-10 4700
众所周知,Vue SPA单页面应用对SEO不友好,当然也有相应的解决方案,通过查找资料,大概有以下4种方法。(本人只用过第一,第三种方案) 1.Nuxt 服务端渲染应用部署 (SSR服务器渲染) 关于服务器渲染:Vue官网介绍 ,对Vue版本有要求,对服务器也有一定要求,需要支持nodejs环境。 使用SSR权衡之处: 开发条件所限,浏览器特定的代码,只能在某些生命周期钩子函数 (lifecycle hook) 中使用;一些外部扩展库 (external library) 可能需要特殊处理,才能在服务器渲染
vue2 seo优化
09-20
Vue2的SEO优化主要可以通过以下两种方式来实现:服务端渲染(SSR)和预渲染。 1. 服务端渲染(SSR):使用服务端渲染可以在服务端将Vue组件渲染成HTML,并发送给浏览器。这样搜索引擎可以直接读取到完整的HTML内容,提高了页面的可索引性。可以使用框架如Nuxt.js来实现Vue的服务端渲染。 2. 预渲染:对于一些静态页面或者没有动态路由的页面,可以通过预渲染的方式来处理。预渲染是将Vue组件在构建时生成静态的HTML文件,再部署到服务器上。这样搜索引擎也可以直接读取到完整的HTML内容。可以使用预渲染插件如prerender-spa-plugin来实现预渲染。 综上所述,Vue2的SEO优化可以通过服务端渲染和预渲染这两种方式来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • springboot连接两个多个数据库/数据源(多个) 47057
  • Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans 45854
  • Kubernetes k8s查看pod的ip地址 32187
  • Could not set parameters for mapping: ParameterMapping(已解决) 23080
  • maven打包失败 Cannot create resource output directory[已解决] 15726

分类专栏

  • 微信支付 1篇
  • java多线程 2篇
  • springboot 14篇
  • java工具类 5篇
  • 自定义注解 1篇
  • nginx 2篇
  • vue 1篇
  • puppeteer 1篇
  • kafka 1篇
  • elasticsearch 1篇
  • Kubernetes 1篇
  • mybatisPuls 1篇
  • Clickhouse 2篇
  • sql 1篇
  • springCloud 1篇
  • java 35篇
  • Liunx 10篇
  • PostgreSql 12篇
  • git 7篇
  • RabbitMQ 1篇
  • mybatis 12篇
  • mysql 7篇
  • jvm 3篇
  • redis 5篇
  • maven 3篇
  • java爬虫

最新评论

  • java redis实现消息队列功能

    wuyuanshun: 这个网上有很多就没有粘贴,redis锁的工具类应该可以搜到的

  • java redis实现消息队列功能

    spirit_captive: redisServiceUtils的类方便给一下吗

  • Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans

    鲸JayChou: 大佬,感谢,的确是这个问题

  • vue无需改动代码的SEO优化【百度收录问题】优化--puppeteer(详细流程)

    丨恰同学少年: 前端Vue路由改为 history模式

  • 拷贝项目移除git提交记录

    治疗失眠186: rm -r .git

最新文章

  • 微信小程序支付-切换商户号
  • java redis实现消息队列功能
  • java多线程详细讲解 线程的创建、线程的状态、synchronized锁、Volatile关键字、和cas锁(自旋锁 乐观锁 无锁)
2023年7篇
2022年17篇
2021年15篇
2020年40篇
2019年7篇

目录

目录

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuyuanshun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司吴忠百度竞价报价绵阳网站推广系统公司宜春网站优化推广推荐北京网站排名优化多少钱平顶山网站推广公司衢州阿里店铺运营哪家好南京SEO按天收费公司常德关键词按天收费哪家好汕尾企业网站制作随州网站制作设计价格安顺网站优化按天计费公司淄博优秀网站设计公司苏州百度关键词包年推广多少钱白山网站开发推荐常德网络推广报价岳阳网站制作设计推荐益阳网站优化按天计费公司常州网站关键词优化推荐巴中网站推广系统价格南昌网站改版多少钱龙岩营销网站报价北京SEO按天计费多少钱成都优化多少钱衢州阿里店铺运营哪家好许昌网站优化排名多少钱巢湖网站优化软件报价宝鸡网络营销推荐贺州百度竞价包年推广价格商丘网站优化软件价格临猗百搜标王推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化