yucca / 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
This package is not auto-updated.
Last update: 2024-09-20 07:12:31 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: ~
文档
工作原理
- 检查是否应显示预渲染页面
- 检查请求是否来自爬虫(代理字符串)
- 检查是否请求资源(js、css等...)
- (可选)检查URL是否在白名单中
- (可选)检查URL不在黑名单中
- 向prerender服务(PhantomJS服务器)发起一个针对页面预渲染HTML的
GET请求 - 将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路径列入白名单。使用正则表达式进行比较,因此尽可能具体。如果提供了白名单,则仅包含白名单路径的URL将进行预渲染。
以下是一个示例配置,仅预渲染包含 "/users/" 的 URL
#app/config/config.yml
yucca_prerender:
whitelist_urls: ['/users/*']
注意:请在此处指定 URL 而不是 Symfony2 路由名称。
黑名单
黑名单单个 URL 路径或多个 URL 路径。使用正则表达式进行比较,因此尽可能具体。如果提供了黑名单,则所有 URL 都将进行预渲染,除了包含黑名单部分的 URL。请注意,如果 referer 是黑名单的一部分,它也不会被预渲染。
以下是一个示例配置,预渲染所有 URL,但 不包括 包含 "/users/" 的 URL
#app/config/config.yml
yucca_prerender:
blacklist_urls: ['/users/*']
注意:请在此处指定 URL 而不是 Symfony22 路由名称。
测试
如果您想确保您的页面正确渲染
- 在 Chrome 中打开开发者工具(Cmd + Alt + J)
- 点击右下角的设置齿轮。
- 点击设置面板左侧的“覆盖”。
- 勾选“用户代理”复选框。
- 从用户代理下拉菜单中选择“其他...”。
- 在输入框中输入googlebot。
- 刷新页面(确保开发者工具保持打开状态)。
感谢
- 感谢 bakura10 为 Zend Framework 版本做出的贡献。
- 感谢 Romain Boyer 让我发现 prerender.io
- 感谢 prerender 团队和所有 JS MVC 开发者