- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我发布了一个 reactjs 网站,该网站依赖 AJAX 请求(如果相关,则在 graphQL API 上发送 POST 请求)来显示数据。
使用 google console fetch & render 服务,我可以看到只有不需要调用任何 API 的组件才会被渲染。根本不会呈现任何基于 AJAX 的组件。
Google fetch & render 确实显示了我网站的 2 张渲染图片(google 与 visitor),但都缺少 AJAX 内容。
在这种情况下服务器渲染是强制性的吗?
我没有 robots.txt 文件。
我正在做类似的事情:
import React, { Component } from 'react';
import { observer } from 'mobx-react';
import { observable, runInAction } from 'mobx';
import axios from 'axios';
import ContributorList from '~/components/global/ContributorList';
import type { User } from '~/types';
import CSSModules from 'react-css-modules';
import styles from './style.less';
@observer
@CSSModules(styles)
export default class Footer extends Component {
@observable contributors: Array<User> = [];
async loadContributors () {
const { data: {
data: data
} } = await axios.post('/', {
query: `
{
users {
id,
name,
slug,
avatar {
secure_url
}
}
}
`
});
runInAction( () => {
this.contributors = data.users;
});
}
componentDidMount () {
this.loadContributors();
}
render () {
return (
<div styleName='contributors'>
{ 'Static content' }
<ContributorList
contributors={ this.contributors }
/>
</div>
);
}
};
在我的浏览器中,我可以看到一切正常(“静态内容”+ 很少异步获取的贡献者)。但是通过 google fetch and render,我看到了 2 个只显示“静态内容”的屏幕截图。
因此,我的动态内容不会出现在谷歌搜索结果中。
最佳答案
现在所有人都在谈论依赖 Ajax 并使用客户端技术呈现网站内容的渐进式网络应用程序 (PWA)。
但这些技术对 SEO 一点都不友好,因为 Google 无法索引经典的 Ajax 请求和大多数现代请求。
由于您使用的是 ReactJs,并且您希望 Google 将您的网站编入索引,因此您必须使用服务器端渲染。
这会减慢您的网站速度,同时 Google 可以抓取您的所有页面并将其编入索引,而且用户可以在任何设备上查看它,甚至是旧设备。
当你想构建一个 PWA 或一般的现代网络应用程序时,你必须回到基础,使用一种称为优雅降级的旧技术,这意味着如果你从浏览器中禁用 JS,你仍然可以看到内容并且您网站上的所有功能都可用。
这与 Google 抓取您的网站并将其编入索引的方式相同。
Google 有很多关于抓取 Ajax 内容的建议:
我们正在开发一个与您的项目类似的新项目,该项目使用 reactjs 构建,它将成为世界上首批 Google 可以通过执行上述几点来像抓取任何其他网站一样抓取它的 PWA 之一。
Google 还在他们的网站站长博客上发表了一篇文章,讨论 PWA 和任何像您这样的现代网络应用。
有关更多详细信息,请查看此链接 https://webmasters.googleblog.com/2016/11/building-indexable-progressive-web-apps.html
关于 robots.txt 文件,建议为任何网站添加机器人,即使您没有要阻止的页面,但您可能想要阻止 ajax 请求和其他烦人的爬虫。
关于ajax - Google console fetch & render 确实显示 AJAX 获取的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739372/
我要选择column1小于或等于 column2 的数据.但是,当我尝试使用 { console.log(notify) res.render('index', { title
我在页面中有一个更新面板,供用户指定事件的“所有者”。该所有者将是我们事件目录中的用户。该面板允许用户输入一些文本,然后单击搜索按钮以在我们的 Active Directory 中查找匹配的用户。当用
我想知道为什么同一个实体在控制台中调用的浏览器 window 对象中有不同的表示: 如果我们仅在浏览器控制台内调用window,我们将获得完整的浏览器信息。其中文档将表示为类似对象的实体,包括各种 P
我有一个正在处理大量数据的应用程序,我正在监视它的 .NET 内存性能计数器。基于性能计数器,所有堆中的#Bytes 正在缓慢增长(每 12 小时约 20MB)。所有 3 代也被收集(gen0 每秒几
According to documentation 默认实现不执行任何操作。 但是...我从 drawRect 方法中抛出异常并且我看到了下一个调用堆栈 3 EasyWakeup
我使用 package maven 插件构建了一个 Spring 应用程序的 jar。在本地,我可以运行它java -jar -Dspring.profiles.active=dev target/m
我们正在开发一种软件,我们可以在其中预览和记录从视频采集卡采集的输入视频源。预览是用DirectShow实现的,录制是用Media Foundation实现的(老软件慢慢升级到MediaFound
我在 symfony 中构建了一个简单的操作,它通过 wkhtmltopdf 生成一个 PDF 文件并将其输出到浏览器。 代码如下: $response = $this->getResponse(
这将是一个简短的问题。 来源在这里:https://github.com/exhuma/grc 标题解释了我的问题;) 我注册并上传了包到pypi。现在,如果我运行 easy_install grc,
我需要将事务与LINQ to SQL一起使用,并且正在阅读以熟悉它。 确实已处理SubmitChanges吗? 最佳答案 当您调用SubmitChanges时,LINQ to SQL将检查一组已知对象
在 Ajax 结果之后,我试图淡出 html 按钮。这在大多数情况下都有效,但有时按钮不会淡出,我不明白为什么。 $.ajax({ type: frm.attr('method'),
我以这样的方式创建 Cesium.Primitive: _createPrimitive: function (linesNumber) { var instances = [
我正在 Spring 上构建一个 Web 应用程序。 我很困惑是否应该在配置中使用 mvc:annotation-driven 还是 context:annotation-config 来扫描注释来处
问题 - 给定一个字符串 '0'、'1' 和 '?'。生成所有可能的字符串,您可以在其中替换“?”用“0”或“1”? 例如 - 输入 - “0??” 输出 - “000”、“001”、“010”、“0
总结: 修改wxwidgets Hello World tutorial中的代码后在 CppMicroServices 框架中的“模块”中,使用事件表或 Bind() 注册的事件似乎不会触发,但使用
我的 Capistrano 任务失败了 No such file or directory @ rb_sysopen - /home/blog/pids/grantb.blog.staging.pid
我们在 repo 协议(protocol)中有一个配置文件,所有用户都根据他们的功能做出贡献。对于我的本地测试,我需要手动更改该配置文件中的两个值,但我不想将我的更改提交回服务器。 但是,如果存储库中
我在顶部菜单(ListItems)的开头插入一个菜单选项并使用 $('#newMenuItem').show('slide'); 成功了。但是,我不喜欢它从左上角滑入的方式,所以我将其更改为 $('#
我尝试在我的 NSWindow 上调用 setFrame:display:animate: 并且没有执行任何操作,但是如果我在同一个窗口上调用 setFrame:display:,它有效。 我需要做其
我是一名优秀的程序员,十分优秀!