Articles of seo

我应该使用node.js为我的单页面应用程序?

我已经构build了一个Backbone.js应用程序,完成所有的重大工作,如模板,翻译和数据加载,客户端。 (该应用程序基本上是教育资料的框架 – video和交互式可视化 – 至今还没有包含任何重要的实时function 。) 不过,我正在思考,如果我最好使用node.js的一些function…? SEO JSDOM或其​​他node.js库是否足够成熟,可以将呈现的模板提供给客户端? 桌面 在不久的将来,是否可以通过本地运行的node.js来分发.exe / .app文件? 我应该看哪个框架? 翻译/ i18n 使用node.js查找翻译并为翻译人员构build翻译仪表板是否是一个好主意? 数据库 我也应该使用node.js查询我的数据库(可能SQLite,因为我想在本地镜像)用户和其他数据或坚持与PHP / Ruby的后端? 总而言之,如果我坚持原来的客户端方法,我会失去什么? 我的JavaScript框架可以从早期的包含node.js的教育材料中获益吗?

制作React图库的策略对search引擎友好

我写了一个React图片库或幻灯片。 我需要使search引擎可以索引替代文本,但因为我的服务器是在PHP中,React.renderToString是有限的使用。 该服务器在PHP + MySQL中。 PHP使用Smarty(一个体面的PHP模板引擎)来呈现HTML。 其余的PHP框架是我自己的。 Smarty模板有这么一个单一的线: <script> var GalleryData = {$gallery}; </script> 这是由PHP的控制器function呈现如下: return array( 'gallery' => json_encode($gallery), ); ( $gallery是MySQL查询的结果表)。 而我的.js: React.render(<Gallery gallery={GalleryData} />, $('.gallery').get(0)); 不是最优雅的设置,但考虑到我的服务器是在PHP中,似乎没有更好的方法来做到这一点(?) 我做了一个超级快速入门,在第一枪时修复了这个问题 – 我从Firebug复制了呈现的HTML,并手动将其插入到数据库中的一个新表中。 然后,我只是从PHP中呈现这个代码块,我们很高兴浏览器。 有一个复杂的是,因为React组件只在第一次渲染时插入到DOM中(据我了解),而且由于该库一次只显示一个图像幻灯片,我不得不手动点击所有幻灯片一次保存HTML代码。 但是现在,替代文本可以由CMS编辑,所以我需要自动化这个过程,或者想出一个更好的解决scheme。 在Node.js中重写服务器是不可能的。 我的第一个猜测是我需要安装Node,并编写一个脚本来创build相同的React组件。 由于input数据(包括alt文本)必须来自MySQL,我有几个select: 从注释连接到MySQL数据库,并复制查询 在PHP端创build一个只返回JSON的响应URL(把SQL查询放入一个通用函数) 在Node中获取整个页面,但是提取GalleryData将会是一团糟 然后,我必须确保所有组件都被渲染到DOM中,所以我可以通过手动调用nextSlide()方法多次编写幻灯片(less一个)来编写脚本。 最后,我将把渲染的DOM再次保存到数据库(所以Node脚本毕竟需要一个MySQL连接 – 也许第一个选项是最好的)。 对于这样一个基本要求,整个过程似乎非常复杂。 我错过了什么吗? 我对Node完全陌生,在浏览器之外构buildDOM的概念对我来说基本上是新的。 我不介意将Node引入到我的架构中,但它只是支持在前端使用React。 请注意,该网站每月大约有15,000个综合浏览量,因此不需要考虑大规模的可扩展性 – 我不使用任何页面caching,因为这种stream量并不需要。 我可能有一些需要像这样静态渲染的React组件,但是维护一个小的技术开销(例如,在Node中维护一组并行的SQL查询)不会是一个大问题。 有谁可以在这里指导我吗?

在SPA(单页面应用程序)中使用node.js + express.js在服务器端dynamic生成内容的SEO

我的客户端代码是一个单独的页面应用程序(写在knockout.js)与自己的路由系统,所以当谷歌爬虫机器人将尝试访问链接(这与后端请求新的页面无关,但只是客户端的一部分它会要求服务器(node.js + express.js)服务页面(例如'mywebsite / about'),当然服务器将返回404,因为它不知道客户端路由系统。 这是我目前的服务器代码: router.get('*', function(req, res, next) { res.sendFile(path.resolve('../dist/index.html')); }); 我的想法是定义与客户端相同的路由结构,并在search参数中传递客户端路由系统的路由: router.get('/about', function(req, res, next) { res.sendFile(path.resolve('../dist/index.html?tab=about')); }); 然后在客户端,我可以在JavaScript中捕捉并select正确的路线。 在这里当然我有另一个问题 – 据我所知,谷歌机器人不运行JavaScript ..但在这里,我可以使用prerender.io中间件,我猜。 1)这是一个正确的方式去与单页面应用程序生成的内容和search引擎优化? 2)如何从express.js传递search参数?

有没有可能有一个SEO友好的Express.js网站?

如果Express提供传统的路由结构(即http://yoursite.com/foo ),那么这些页面是否会显示在Google的search引擎结果页面上,类似于使用相同path结构的Wordpress博客或PHP网站?

没有客户端JavaScript的Backbone.js

我正在研究使用Backbone.js和node.js来编写一个小型的Web应用程序。 在客户端和服务器之间共享代码是有吸引力的。 我无法弄清楚没有JS(和search引擎)的客户端应该如何与网站进行交互。 如何在没有客户端JavaScript的情况下进行validation和渲染? 当然,我想这样做没有代码重复。 对我来说,Backbone.js和其他服务器端js的意义在于,您可以在服务器和客户端上拥有相同的表单validation和模板/视图生成。

Prerender.io不caching页面

我用一个expressJS后端与AngularJS做了一个应用程序。 现在我想让它抓取,我发现prerender.io 。 我想我已经做了一切正确的bur由于某种原因,我没有看到prerenderer仪表板中的任何统计数据。 在我的app.configure函数中,我包含了如下的标记: app.use(require('prerender-node').set('prerenderToken', 'my-token')); 在我的HTML中,我已经包含了meta-fragment标签: <meta name="fragment" content="!"> 我做的最后一件事是告诉AngularJS使用hashprefix: $locationProvider.html5Mode(false); $locationProvider.hashPrefix('!'); 但由于某种原因,如果我参考文档,我不会得到正确的结果。 下面你可以看到它应该做什么: Google会像这样向您的服务器发送请求: http://www.example.com/?_escaped_fragment_=/user/123 你把这个url变成这个: http://www.example.com/#!/user/123 由于某种原因,如果我尝试这个,它仍然添加#! 标志添加URL的末尾,所以如果我请求我的应用程序的URL像谷歌我得到这个: http://www.my-website.com/?_escaped_fragment_=#!/home 所以它不会replaceurl中的散列。 我认为这是我的问题的原因。 提前致谢! 编辑 – 如果我例如添加一个额外的路线,那么它的作品: app.get('/', function (req, res) { res.sendfile('./public/index.html'); }); app.get('/test', function (req, res) { res.sendfile('./public/index.html'); }); '/'路线不起作用, '/test'路线不起作用。

如何制作和存储邮件标题的slu??

我使用MongoDB / mongoose来存储具有以下模式的博客文章: PostSchema = mongoose.Schema({ title: {type: String}, body: {type: String} }); 现在我的posturl如下所示: http://www.example.local/posts/571f78d077b4454bafcfcced 我想我的post包含slu like如下: http://www.example.local/posts/571f78d077b4454bafcfcced/how-to-make-and-store-slug-for-title 所以我的问题是: 我应该生成一次slug和存储PostModel架构或每个post上显示? 如何为标题(现有的节点模块解决这个任务)生成slug basen非ASCII字符? 我应该使用什么地方将查询从http://www.example.local/posts/571f78d077b4454bafcfccedredirect到http://www.example.local/posts/571f78d077b4454bafcfcced/how-to-make-and-store-slug-for-title (nodejs,nginx,客户端)。 谢谢! EIDT:我也发现,在StackOverflow数据库viwer的问题与ID 503429 SO存储non slugged标题。 那么这是否意味着SO在每次请求问题时都会计算出slu g?

angular4和SEO

Express有一个简单的Angular 4项目。 当我尝试使用Googlebot访问我的网站时,它只显示了一个空白页面(AppRoot的innerHTML)。 我以为谷歌声称它的机器人支持Angular 4 / JS网站? 如果这仍然是问题,使用Angular Universal的服务器端渲染真的是最好的解决scheme吗? 就像我必须build立另一台服务器,服务器端提供的应用程序,除了服务于普通的客户端渲染应用程序的主服务器? 如果是这样,我怎么告诉googlebot去端口的服务器端渲染的应用程序和正常的httpstream量去客户端呈现应用程序的端口? 不是抓取工具的HTTPstream量?

如何运行PhantomJS作为服务器并远程调用它?

这可能是一个非常基本的问题。 我想运行一个无头浏览器PhantomJS作为服务器,但不作为命令行工具。 一旦运行,我想通过HTTP远程调用它。 我唯一需要的是发送一个URL并取回HTML输出。 我需要它为AJAX应用程序生成HTML以使其可search。 可能吗 ?

使用node.js服务Backbone.js应用程序的内容来searchsearch引擎优化

要么我的谷歌已经失败了,或者真的没有太多的人这样做呢。 如您所知,Backbone.js有一个致命弱点 – 它不能提供给它的页面抓取工具,比如googlebot,因为它们不运行JavaScript(尽pipeGoogle的资源,V8引擎以及令人清醒的事实JavaScript应用程序正在崛起,我预计这将在某一天发生)。 我知道谷歌有一个hashbang解决方法的政策,但这是一个坏主意。 另外,我正在使用PushState。 这对我来说是一个非常重要的问题,我希望它也适用于其他人。 search引擎优化是不容忽视的,因此不能被认为是需要或依靠它的许多应用程序。 inputnode.js. 我只是刚刚开始进入这种热潮,但似乎有可能有相同的客户端上存在的Backbone.js应用程序在服务器与Node.js握手。 node.js然后将能够提供从Backbone.js应用程序呈现的页面到页面爬虫。 这似乎是可行的,但我正在寻找一个谁更有经验的node.js甚至更好的人,谁已经真正做到这一点,在这方面给我build议。 我需要采取哪些步骤来允许我使用node.js将我的Backbone.js应用程序提供给网页抓取工具? 另外,我的Backbone应用程序使用了一个用Rails编写的API,我认为这会让人头疼。 编辑:我没有提到,我已经有一个生产应用程序写在Backbone.js。 我正在寻找应用这种技术的应用程序。