yucca/prerender-bundle

允许您轻松地为运行在客户端MVC的Symfony应用程序使用预渲染

安装次数: 17,003

依赖项: 0

建议者: 0

安全: 0

星标: 56

关注者: 7

分支: 15

开放问题: 8

类型:symfony-bundle

3.2 2019-01-05 06:44 UTC

This package is not auto-updated.

Last update: 2024-09-20 07:12:31 UTC


README

Build Status Coverage Status

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: ~

文档

工作原理

  1. 检查是否应显示预渲染页面
    1. 检查请求是否来自爬虫(代理字符串)
    2. 检查是否请求资源(js、css等...)
    3. (可选)检查URL是否在白名单中
    4. (可选)检查URL不在黑名单中
  2. prerender服务(PhantomJS服务器)发起一个针对页面预渲染HTML的GET请求
  3. 将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 路由名称。

测试

如果您想确保您的页面正确渲染

  1. 在 Chrome 中打开开发者工具(Cmd + Alt + J)
  2. 点击右下角的设置齿轮。
  3. 点击设置面板左侧的“覆盖”。
  4. 勾选“用户代理”复选框。
  5. 从用户代理下拉菜单中选择“其他...”。
  6. 在输入框中输入googlebot。
  7. 刷新页面(确保开发者工具保持打开状态)。

感谢

  • 感谢 bakura10 为 Zend Framework 版本做出的贡献。
  • 感谢 Romain Boyer 让我发现 prerender.io
  • 感谢 prerender 团队和所有 JS MVC 开发者