wanmendoza / prerender-bundle
允许您轻松地在运行客户端 MVC 的 Symfony 应用程序中使用预渲染
Requires
- php: >=7
- psr/log: ~1.0
- symfony/framework-bundle: ~3.3
Requires (Dev)
- phpunit/phpunit: ^6.5
- satooshi/php-coveralls: ~0.6
- squizlabs/php_codesniffer: 1.4.*
README
Backbone、EmberJS、Angular 等是否是您的日常基础?在管理员区域,这没问题,但在您的前台,您可能会遇到一些 SEO 问题
感谢 Prerender.io,您现在可以使用 PhantomJS 在服务器上动态渲染 JavaScript 页面。
此包主要受 bakura10 在 zfr-prerender 上的工作启发。
安装
通过输入(或将它添加到您的 composer.json 文件)来安装模块
$ php composer.phar require "yucca/prerender-bundle" "0.1.*@dev"
在 app/AppKernel.php 中注册该包
// app/AppKernel.php
public function registerBundles()
{
return array(
// ...
new Yucca\PrerenderBundle\YuccaPrerenderBundle(),
);
}
在 app/config/config.yml 中启用包的配置
# app/config/config.yml
yucca_prerender: ~
文档
它如何工作
- 检查我们是否应该显示一个预渲染的页面
- 检查请求是否来自爬虫(代理字符串)
- 检查我们是否请求的是一个资源(js、css 等...)
- (可选)检查 URL 是否在白名单中
- (可选)检查 URL 是否不在黑名单中
- 向 prerender 服务(PhantomJS 服务器)发出一个
GET请求以获取页面预渲染的 HTML - 将 HTML 返回给爬虫
定制
此包包含一个合理的默认值,该值从 prerender-node 中间件 中提取,但您可以轻松地对其进行定制
#app/config/config.yml
yucca_prerender:
....
预渲染 URL
默认情况下,YuccaPrerenderBundle 使用部署在 http://prerender.herokuapp.com 的 Prerender.io 服务。但是,您可能希望 在自己的服务器上部署它。为此,您可以使用以下配置自定义 YuccaPrerenderBundle 以使用自己的服务器
#app/config/config.yml
yucca_prerender:
backend_url: https://:3000
使用此配置,以下是 YuccaPrerender 将如何代理 "https://google.com" 请求
GET https://:3000/https://google.com
爬虫用户代理
YuccaPrerender 根据用户代理字符串来决定是否预渲染,以检查请求是否来自机器人。默认情况下,这些用户代理已注册:'baiduspider'、'facebookexternalhit'、'twitterbot'。Googlebot、Yahoo 和 Bingbot 不应在此列表中,因为我们支持 escaped_fragment 而不是检查这些爬虫的用户代理。您的网站必须理解 '#!' ajax url 符号。
您可以使用以下示例配置添加其他用户代理字符串进行评估
#app/config/config.yml
yucca_prerender:
crawler_user_agents: ['yandex', 'msnbot']
忽略的扩展名
YuccaPrerender 默认配置为忽略所有具有以下扩展名的资源请求:.js、.css、.less、.png、.jpg、.jpeg、.gif、.pdf、.doc、.txt、.zip、.mp3、.rar、.exe、.wmv、.doc、.avi、.ppt、.mpg、.mpeg、.tif、.wav、.mov、.psd、.ai、.xls、.mp4、.m4a、.swf、.dat、.dmg、.iso、.flv、.m4v、.torrent。这些永远不会被预渲染。
您可以使用以下示例配置添加您自己的扩展名
#app/config/config.yml
yucca_prerender:
ignored_extensions: ['.less', '.pdf']
白名单
将单个或多个URL路径列入白名单。使用正则表达式比较,因此尽可能具体。如果提供了白名单,则仅预渲染包含白名单路径的URL。
以下是一个示例配置,仅预渲染包含"/users/"的URL
#app/config/config.yml
yucca_prerender:
whitelist_urls: ['/users/*']
注意:请在此处指定URL,而不是Symfony2路由名称。
黑名单
将单个或多个URL路径列入黑名单。使用正则表达式比较,因此尽可能具体。如果提供了黑名单,则除包含黑名单部分的URL外,所有URL都将预渲染。请注意,如果来源部分包含在黑名单中,它也不会被预渲染。
以下是一个示例配置,预渲染除包含"/users/"的所有URL
#app/config/config.yml
yucca_prerender:
blacklist_urls: ['/users/*']
注意:请在此处指定URL,而不是Symfony22路由名称。
测试
如果您想确保页面正确渲染
- 在Chrome中打开开发者工具(Cmd + Atl + J)
- 点击底部的设置齿轮。
- 点击设置面板左侧的“覆盖”。
- 勾选“用户代理”复选框。
- 从用户代理下拉菜单中选择“其他...”。
- 在输入框中输入googlebot。
- 刷新页面(确保保持开发者工具打开)。
感谢
- 感谢 bakura10 为Zend Framework版本提供支持。
- 感谢 Romain Boyer 使我发现了prerender.io
- 感谢prerender团队和所有JS MVC开发者