wanmendoza/prerender-bundle

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

安装: 8

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 15

类型:symfony-bundle

3.1 2018-01-26 09:23 UTC

This package is not auto-updated.

Last update: 2024-09-20 06:04:28 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 服务器)发出一个 GET 请求以获取页面预渲染的 HTML
  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。

以下是一个示例配置,仅预渲染包含"/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路由名称。

测试

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

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

感谢

  • 感谢 bakura10 为Zend Framework版本提供支持。
  • 感谢 Romain Boyer 使我发现了prerender.io
  • 感谢prerender团队和所有JS MVC开发者