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 开发者