V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AlwaysBee
V2EX  ›  程序员

单页应用的 SEO 解决方案,这么做是否可行?

  •  
  •   AlwaysBee · 2017-02-03 11:36:51 +08:00 · 5447 次点击
    这是一个创建于 2857 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于国内的搜索引擎对 js 的支持糟糕,那么是否可以这样,客户端请求的时候,将渲染之后的结果发送回服务端,保存为静态文件(根据比对内容决定是否更新),那么当下一次请求该页面的时候,直接返回已保存的静态文件即可。
    ( PS :我知道可以在服务端跑一些渲染程序,只是哪一个解决方案更好罢了)

    21 条回复    2017-02-03 15:28:37 +08:00
    int64ago
        1
    int64ago  
       2017-02-03 11:54:54 +08:00
    SSR
    otakustay
        2
    otakustay  
       2017-02-03 12:19:41 +08:00
    1. 使用 react 等技术直接输出 HTML ,这无疑是最好的,即便有一定的服务器资源开销也非常小,因此可以不考虑缓存、静态化等事情,也就无需去做复杂的缓存过期策略等工作。代价是会被某些框架捆绑
    2. 用 seojs 等做基于实际渲染的 HTML 输出,开销非常之高,如果可以正确识别出爬虫的话,考虑到爬虫的频率不高,可以不做缓存,事实上就爬虫这个频率,你缓存也没用基本等下次来爬也过期了
    3. 你自己说的方法,前提是爬虫来之前有用户访问,但通常爬虫的速度比普通用户还要快
    chairuosen
        3
    chairuosen  
       2017-02-03 12:29:27 +08:00
    不信任任何客户端发来的东西,更何况 html
    AlwaysBee
        4
    AlwaysBee  
    OP
       2017-02-03 12:34:25 +08:00
    @chairuosen 好不容易想到一个方案,突然又被你否决了,感谢
    kamkam
        5
    kamkam  
       2017-02-03 13:31:10 +08:00
    国内的搜索引擎对 js 的支持糟糕?
    grayon
        6
    grayon  
       2017-02-03 13:42:26 +08:00
    HTTP 304
    54sword
        7
    54sword  
       2017-02-03 14:02:36 +08:00
    分享自己写的一个 SPA (单页面应用)的小站点,支持 SEO ,供你参考。
    前端基于 React (全家桶),然后上了 React 服务器端渲染。
    xiaoduyu.com
    AlwaysBee
        8
    AlwaysBee  
    OP
       2017-02-03 14:14:13 +08:00
    @kamkam 我指的是搜索引擎的爬虫,还是你指的是别的问题
    AlwaysBee
        9
    AlwaysBee  
    OP
       2017-02-03 14:17:24 +08:00
    @54sword 好的,感谢。。。 PS :我用的 vue 全家桶,[artizen.cc]( https://artizen.cc)
    wanghanlin
        10
    wanghanlin  
       2017-02-03 14:21:08 +08:00
    prerender.io 开源的
    newworld
        11
    newworld  
       2017-02-03 14:21:28 +08:00 via iPhone
    @AlwaysBee 移动端支持貌似不太好
    54sword
        12
    54sword  
       2017-02-03 14:23:09 +08:00
    ijse
        13
    ijse  
       2017-02-03 14:26:37 +08:00
    有一些在线平台可以做,比如 https://prerender.io/
    AlwaysBee
        14
    AlwaysBee  
    OP
       2017-02-03 14:31:36 +08:00
    @ijse
    @wanghanlin
    刚刚试了一下,添加完链接后,渲染结果页面是空白的,只有标题部分渲染成功了
    wanghanlin
        15
    wanghanlin  
       2017-02-03 14:36:40 +08:00
    @AlwaysBee 你是怎么试的?用的在线版还是自己部署的?
    AlwaysBee
        16
    AlwaysBee  
    OP
       2017-02-03 14:40:09 +08:00
    @wanghanlin 在线版,有一个添加链接的表单,我加上去之后查看渲染结果是空白的
    uzumaki
        17
    uzumaki  
       2017-02-03 14:41:48 +08:00 via Android
    看携程
    AlwaysBee
        18
    AlwaysBee  
    OP
       2017-02-03 14:48:55 +08:00
    @newworld 哈哈,一直没时间去适配
    wanghanlin
        19
    wanghanlin  
       2017-02-03 14:58:53 +08:00
    @AlwaysBee laravel log 有没有报错?
    wanghanlin
        20
    wanghanlin  
       2017-02-03 15:15:24 +08:00
    @AlwaysBee 可能跟你那图片 src 有问题有关系
    ```
    0|prerender | [Vue warn]: Error when rendering component <lazy-image>:
    0|prerender | https://artizen.cc/dist/main.js:8 in Lr
    ```
    AlwaysBee
        21
    AlwaysBee  
    OP
       2017-02-03 15:28:37 +08:00
    @wanghanlin 对,刚刚我在查原因也看到了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.