werkint / prerender-bundle
允许您轻松地为运行Client-Side MVC的Symfony2应用使用prerender。
Requires
- php: >=5.3.2
- psr/log: 1.0.0
- symfony/framework-bundle: ~2.3
Requires (Dev)
- phpunit/phpunit: ~3.7
- satooshi/php-coveralls: ~0.6
- squizlabs/php_codesniffer: 1.4.*
This package is not auto-updated.
Last update: 2022-02-01 12:48:36 UTC
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: ~
文档
如何工作
- 检查是否应该显示prerender页面
- 检查请求是否来自爬虫(代理字符串)
- 检查是否请求资源(js、css等...)
- (可选) 检查URL是否在白名单中
- (可选) 检查URL是否不在黑名单中
- 向prerender服务(PhantomJS服务器)发出
GET请求以获取页面的prerendered HTML - 将HTML返回给爬虫
自定义
此包包含从prerender-node中间件提取的合理的默认设置,但您可以轻松自定义它。
#app/config/config.yml
yucca_prerender:
....
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根据User-Agent字符串决定是否进行预渲染,以检查请求是否来自机器人。默认情况下,已注册以下用户代理:'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路径。使用正则表达式进行比较,因此尽可能具体。如果提供了白名单,则只有包含白名单路径的URL才会被预渲染。
以下是一个示例配置,仅预渲染包含"/users/"的URL。
#app/config/config.yml
yucca_prerender:
whitelist_urls: ['/users/*']
注意:请在此处指定URL,而不是Symfony2路由名称。
黑名单
黑名单可以指定单个URL路径或多个URL路径。使用正则表达式进行比较,因此尽可能具体。如果提供了黑名单,则除了包含黑名单部分的URL之外的所有URL都会被预渲染。请注意,如果引用者是黑名单的一部分,它也不会被预渲染。
以下是一个示例配置,预渲染除包含"/users/"之外的所有URL。
#app/config/config.yml
yucca_prerender:
blacklist_urls: ['/users/*']
注意:请在此处指定URL,而不是Symfony2路由名称。
测试
如果您想确保您的页面正确渲染
- 在Chrome中打开开发者工具(Cmd + Atl + J)
- 点击右下角的设置齿轮。
- 点击设置面板左侧的“覆盖”。
- 勾选“用户代理”复选框。
- 从用户代理下拉菜单中选择“其他...”。
- 在输入框中输入googlebot。
- 刷新页面(确保开发者工具保持打开状态)。
感谢
- 感谢bakura10提供的Zend Framework版本。
- 感谢Romain Boyer让我发现了prerender.io。
- 感谢prerender团队以及所有JS MVC开发者。