使React图像库SEO友好的策略

时间:2015-02-23 21:59:58

标签: javascript php node.js seo reactjs

我写了一个React图片库或幻灯片。我需要通过搜索引擎使alt文本可索引,但由于我的服务器是PHP,React.renderToString的用途有限。

服务器是PHP + MySQL。 PHP使用Smarty(一个不错的PHP模板引擎)来呈现HTML。 PHP框架的其余部分是我自己的。 Smarty模板有这个单一的笨拙线:

<script>
    var GalleryData = {$gallery};
</script>

由PHP的控制器函数呈现如下:

    return array(
        'gallery'     => json_encode($gallery),
    );

$gallery是MySQL查询的结果表)。

我的.js:

React.render(<Gallery gallery={GalleryData} />, $('.gallery').get(0));

不是最优雅的设置,但鉴于我的服务器是在PHP中,似乎没有更好的方法(?)

我在第一次拍摄时做了一个非常快速的修复 - 我从Firebug复制了渲染的HTML,然后手动将其插入到DB中的新表中。然后我简单地从PHP渲染这一代码,我们很高兴能够使用浏览器。

有一个复杂因素是,因为React组件只是在它们首次渲染时插入到DOM中(据我所知),并且因为库一次只显示一个图像幻灯片,所以我不得不手动点击在保存HTML代码之前,通过所有幻灯片。

现在,替代文字可由CMS编辑,因此我需要自动化此过程,或者提出更好的解决方案。

在Node.js中重写服务器是不可能的。

我的第一个猜测是我需要安装Node,并编写一个创建相同React组件的脚本。因为输入数据(包括alt文本)必须来自MySQL,所以我有几个选择:

  1. 从Note连接到MySQL DB,并复制查询
  2. 在PHP端创建一个只返回JSON的响应URL(将SQL查询放入一个公共函数中)
  3. 在Node中获取整个页面,但提取GalleryData将是一团糟
  4. 然后我必须确保所有组件都被渲染到DOM中,因此我可以通过手动调用nextSlide()方法来编写脚本(就像幻灯片一样少)。

    最后,我将再次将渲染的DOM保存到DB中(因此Node脚本毕竟需要MySQL连接 - 也许第一个选项是最好的。)

    对于这样的基本要求,整个过程似乎非常复杂。我错过了什么吗?

    我对Node完全不熟悉,在浏览器之外构建DOM的整个想法对我来说基本上是新的。我不介意将Node引入我的架构,但它只是支持在前端使用React。

    请注意,该网站每月有大约15,000次综合浏览量,因此无需考虑大规模的可扩展性 - 我不使用任何页面缓存,因为此流量不需要它。

    我可能有一些需要像这样静态呈现的React组件,但是保持较小的技术开销(例如在Node中维护一组并行SQL查询)不会是一个大问题。

    任何人都可以在这里指导我吗?

1 个答案:

答案 0 :(得分:3)

我认为你应该尝试使用PHP在服务器端渲染React组件。这是一个PHP lib来做到这一点。

但是,是的,您基本上需要使用PHP代码中的V8js。但是,这是一种实验性的,你可能需要使用其他的。 (而这种“反过来”可能是使用Node / Express来渲染你的组件。Here is some thoughts on how to do it。)

相关问题