Google显示空白页时获取-Reactjs

时间:2019-03-19 08:03:50

标签: reactjs seo single-page-application ecmascript-2017 babel-polyfill

我有一个Reactjs(v.16.6.3)页面,其SEO对于被Google索引很重要。因此,我使用Fetch as Google工具对其进行了检查,以了解此页面会呈现什么Google-bot。 但是,谷歌什么也没显示,只给我描绘了一个空白页! 我添加了“ babel-polyfill”来满足es6-es7-es8的要求,并使Google-bot满意,因为我在ComponentDidMount中使用了async-await(es8)方法(在此生命周期方法中加载异步数据)和其他方法。虽然也使用了流行的箭头功能,但结果在Fetch as Google中还是没有了! 我什至在导入一些仅从另一个模块导入并直接放入render方法(不在componentDidMount中)的平面数据(如我编写的以下内容)时也没有任何结果。我检查并发现它们存在于main.chunk.js中,Google应该对其进行充分的读取和渲染,但没有任何反应!

           export const sampleData01= [
                    {name: sampleName01,
                     lastName: sampleLastName01,
                     image: sampleImage01 
                     },
               {name: sampleName02,
                     lastName: sampleLastName02,
                     image: sampleImage02 
                     }

                    ]
         export const anotherData02= [
                    {name: anotherName01,
                     lastName: anotherLastName01,
                     image: anotherImage01 
                     },
               {name: anotherName02,
                     lastName: anotherLastName02,
                     image: anotherImage02 
                     }

                    ]


        -----------
        import React, {Component} from 'react'
        import {sampleData01} from './tempData'
        import Helmet from "react-helmet";
        class SampleClass extends Component {
        state = {...something , loading:false}
        async componentDidMount = ()=> {
        this.setState({loading:true})
        ...await fetch something
        this.setState({loading:false})
        }
        }

    render(){
    const data = sampleData01.map(item => {
    <li>
    {item.name}
    </li>
    }
    return (
    <div className="...">
    <Loading loading={this.state.loading}/>
    <div className="...">
    <Helmet  link={....}   title={....} meta={....}  />
    <ul>
    {data}
    </ul>
    </div>    

    </div>

    )


    }

    export default SampleClass

一切在开发和生产模式下都可以正常工作。我已经检查了所有可能的方法,例如importimg es6-shim,同构提取,url-搜索参数-polyfill,whatwg-fetch,但没有结果!我读过一些文章,说Google可能使用phantomjs渲染页面。我已经在网上(不是本地)亲自检查了带有phantomjs的页面,它显示并呈现得很好。我读过很多文章说,当我看到其他内容时,Google搜索和SPA没有问题!看来我应该改用SSR以获得更便捷的方式来确保拥有SEO友好页面。

1 个答案:

答案 0 :(得分:1)

我已经尝试了许多肮脏的黑客来改善客户端渲染网站的SEO,但最终SSR是唯一的选择。使用或使用Razzle(https://github.com/jaredpalmer/razzle)或Next.js(https://github.com/zeit/next.js/)制作自己的SSR项目