導航:首頁 > 網站優化 > nodejsseo

nodejsseo

發布時間:2020-08-30 05:53:21

1、百度蜘蛛爬node.js做的網站,爬到的是解析過的網頁還是js代碼?

如果沒有對蜘蛛ua進行判斷跳轉;用戶看到的頁面是什麼,蜘蛛看到的頁面就是什麼;SEO是前端頁面的優化,也就是伺服器返回的HTML頁面

2、react 號稱可以服務端渲染 這個服務端一定要是 nodejs 寫的么

1. 你的理解些許問題。你直接輸出的 html 是沒法和 react 的 js component 直接綁定的。應為 react 內部是 vdom 方式做對比然後改變頁面的。你看見用 react 生成的 html 上面有很多的 id 沒有。哪些都是用來定位和 js component 的關系的。你自己生成的肯定沒有。所謂 server rendering ,就是在後端做這個事情。

2. 因為前端是 js 。所以後端也用 js 的話這個 component 是可以重用的。不然就只能在 py 裡面跑個 v8.然後 renderToString 把 html 搞出來然後再拼進模版里。

3. 我沒有用過 py 。但是按照 2 的思路應該是可以的。

ps>> 其實問題在於為啥你一定要做 server rendering. seo 的話現在的爬蟲大部分都有處理 js 的能力。真不行就專為 seo 做個頁面讓他爬。沒必要這么折騰。

3、學習angularjs 要先學習 nodejs 嗎

下面簡單的說下採用這個架構的優缺點吧!其實間接的也就是談談NodeJS和AngularJS的優缺點了。

NodeJS 優點:
1. 我們選擇 NodeJS,是因為它簡單,高性能,正好我們的服務端只提供RESTfull API,而且我們都很喜歡NodeJS,所以也就使用它了,當然如果選擇其他技術也可以做的很好;

2. 至於資料庫,和NodeJS完美結合的當然是Mongodb,數據格式都是完全匹配,而且Mongodb的性能也是很不錯的,樓上有人對於 Mongodb 數據量大了有些疑問,我們現在的數據量已經很大了,表示暫時還沒有遇到過瓶頸,但是Mongodb也很好的提供了資料庫集群,我們隨時都在為今後做准備;

NodeJS 缺點:
1. 遭遇很多人吐槽甚至放棄使用的肯定是非同步回調,到處callback讓人受不了,其實可以使用一些同步的Mole來彌補這個缺陷,如:async、 when,但是我們沒有使用

2. 事務的支持不是特別好,正好這個功能對於我們產品來說不是很重要。

AngularJS的優點:

1. 我覺得是目前為止最好的前端MVC或者MVVM框架,基本上包含了所有我們需要的功能;

AngularJS的缺點:
1. 有人說SEO,的確這是一個缺點,這是所有前端MVC框架的缺點,但是也有解決方案,我們把外部需要SEO的頁面都獨立成一個站點了,這個獨立的站點使用Express的服務端進行渲染的,而且這些頁面也都是展示文字的,沒有必要用到SPA;

2. 兼容性也是個缺點,我們目前對IE9及以下版本支持都不是很友好,甚至慘不忍睹,由於時間和精力有限,沒法做很多兼容,但是我們相信,為了使用更好的產品,用戶願意為我們升級瀏覽器。

4、phantomjs不能實現seo優化嗎

騰訊問卷所有動態內容,全部由Ajax介面提供。
眾所周知,大部分的搜索引擎爬蟲都不會執行JS,也就是說,如果頁面內容由Ajax返回的話,搜索引擎是爬取不到部分內容的,也就無從做SEO了。
先來看看效果

去年一整年,搜索引擎收錄都少得可憐。
更致命的是,被收錄的頁面,其搜索引擎裡面顯示的標題是最原始的html標題,權重如此高的地方,卻被收錄了一個沒什麼用的標題。
在去年年底完成實施了預渲染服務後,收錄量蹭蹭蹭的起來了,並且收錄的標題也都全部正常了。
而這所有的一切,除了Nginx接入層的配置是需要改動業務代碼外,其他全部都是旁路機制。也就是說,自己做一套,可以給所有同類型業務共用,同時不會影響現有業務的任何代碼任何流程。

PhantomJS來解圍
Ajax無法做SEO這個問題,困擾了我很久,後來發現PhantomJS這東西能在服務端解析HTML,瞬間這個問題不再是問題。
PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast andnative support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.
准備一個PhantomJS任務腳本
這里我命名為spider.js。
通過PhantomJS命令直接執行即可在終端中看到渲染後的html結構

Shell

1

phantomjs spider.js 'http://wj.qq.com/'

命令服務化
什麼意思呢,因為上面是一個命令,沒法很好的響應搜索引擎爬蟲的請求,估我們要把他服務化。
PhantomJS自帶一個Web Server Mole,但總是不穩定,如前面文章所說時不時會假死。
我們就通過Node給他起一個簡單的Web服務。
旁路服務
我們現在已經有了一個能跑預渲染的Web服務了,剩下就是要將搜索引擎爬蟲的流量導入到這個預渲染的服務中,同時把結果再返回給搜索引擎爬蟲。
我們使用Nginx這個接入層利器即可輕松解決這個問題。
這個栗子裡面僅僅對百度爬蟲做了處理,可以自行把爬蟲都補完整。

5、學習vue.js,Node.JS 等技術不知道寫什麼東西

業務需求

最近公司要求開發web版的app,由於app是偏向內容方面,而且帶了一個聊天模塊,所以一般的多頁開發不是很適合,而且主要是手機瀏覽,對載入速度或者用戶體驗來說都比較苛刻。調研了很多框架和模式,最後自己東拼西湊搞出來了這么一個玩意。

服務端

毫無疑問使用node,使用typescript可以有效的在編碼同時查錯,強類型語言寫服務端毫無壓力。
#app.ts 只貼重要代碼 var webpack = require('webpack') var webpackDevMiddleware = require('webpack-dev-middleware') var WebpackConfig = require('./webpack.config') import * as index from "./routes/index"; import * as foo from "./routes/foo"; import * as bar from "./routes/bar"; var app = express(); //啟動服務的時候 打包並監聽客戶端用到的文件,webpackDevMiddleware是開發模式,他會打包js在內存裡面,你改了文件,它也會重新打包 app.use(webpackDevMiddleware(webpack(WebpackConfig), { publicPath: '/__build__/', stats: { colors: true } })); //一般的配置項 app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('view options', { layout: false }); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(methodOverride()); app.use(express.static(__dirname + '/public')); var env = process.env.NODE_ENV || 'development'; if (env === 'development') { app.use(errorHandler()); } //路由配置 app.get('/', index.index); app.get('/foo', foo.index); app.get('/bar', bar.index); app.listen(3000, function(){ console.log("Demo Express server listening on port %d in %s mode", 3000, app.settings.env); }); export var App = app;
服務端渲染頁面
#index.ts import express = require("express") import vueServer = require("vue-server") //服務端渲染vue的插件 var Vue = new vueServer.renderer(); //創建一個服務端的vue export function index(req: express.Request, res: express.Response) { //創建一個組件 var vm = new Vue({ template: ` <p>This is index!</p> ` }); //等待html渲染完成,再返回給瀏覽器 vueServer.htmlReady是vue-server的自帶事件 vm.$on('vueServer.htmlReady', function(html:string) { //這里用的是ejs模板 可以把需要用到的數據設置成window下的全局變數,方便客戶端的js訪問。 res.render('layout',{server_html:html,server_data:'window.cm_data = {name:"張三"}'}) }); }; #layout.ejs 訪問這個SPA的所有url返回的都是這個頁面 <meta>標簽都可以動態設置,只要傳參數進來就可以 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Vue Router Example</title> <style> .v-link-active { color: red; } </style> <script> //定義一些前端需要用到的全局屬性,文章ID或用戶信息什麼的 //index.ts中傳過來的是 window.cm_data = {name:"張三"} //前端就能訪問到了 <%-server_data%> </script> </head> <body> //這里的id是前端需要用到的一個標識 <div id="app"> <h1>Hello App!</h1> <p> <a v-link="{ path: '/foo' }">Go to Foo</a> <a v-link="{ path: '/bar' }">Go to Bar</a> </p> //router-view是客戶端vue-router需要解析的dom //server_html是根據訪問url地址生成的html,是做SEO的重點,不載入下面的app.js也可以看到內容 <router-view> <%-server_html%> </router-view> </div> //webpack打包好的js,主要是路由配置 <script src="/__build__/app.js"></script> </body> </html>
客戶端
#app.js 這個是/__build__/app.js,可以用es6編寫,webpack會轉換的 import Vue from './vue.min' //客戶端的vue.js import VueRouter from './vue-router.min' //vue的路由插件,配合webpack可以很簡單實現懶載入 //懶載入路由 只有訪問這個路由才會載入js import Foo from 'bundle?lazy!../../components/foo' //配合webpack的bundle-loader,輕松實現懶載入 import Bar from 'bundle?lazy!../../components/bar' import Index from 'bundle?lazy!../../components/index' var App = Vue.extend({}) Vue.use(VueRouter) var router = new VueRouter({ //這里要好好說一下,一定要設置html5模式,不然前後端URL不統一會發生問題 //比如訪問 http://localhost:3000/ 服務端定義是訪問index.ts這個路由文件 //如果不是html5模式的話,經過客戶端js運行之後會變成http://localhost:3000/#!/ //在比如直接瀏覽器輸入 http://localhost:3000/foo 服務端定義是訪問.ts這個路由文件 //如果不是html5模式的話,經過客戶端js運行之後會變成 http://localhost:3000/foo/#!/ //設置了html5模式後,載入完js後不會加上#!這2個類似錨點的字元,實現前後端路由統一如果用戶刷新瀏覽器的話,服務端也能渲染出相應的頁面。 history: true, //html5模式 去掉錨點 saveScrollPosition: true //記住頁面的滾動位置 html5模式適用 }) //定義路由,要和服務端路由路徑定義的一樣 router.map({ '/' : { component: Index //前端路由定義, }, '/foo': { component: Foo }, '/bar': { component: Bar } }) //啟動APP router.start(App, '#app')
需要完善的地方

前後端統一模板,已經找到方法了把html分離出來,node端用fs.readFileSync方法獲取,客戶端用webpack的raw-loader獲取html內容

不放源碼都是瞎扯。

6、做SEO如何讓文章快速被收錄

網站發布的每一篇文章都可以被搜索引擎秒收錄,相信這是每一個SEO人員的追求。筆者大家介紹的是如何讓百度快速收錄網站及文章。希望對大家有所幫助。

一、鏈接提交

如果是新站,需要現在百度、360和搜狗平台上做站點的提交與驗證。

二、原創高質量文章

原創高質量文章是網站的核心。當然可以適當轉載與偽原創其他同類型的網站。

三、優質外鏈

大量優質的外鏈資源會給網站帶來權重的同時,也會吸引大量搜索引擎蜘蛛的光臨。另外百度分享按鈕也可以吸引蜘蛛很快的光臨網站。

四、robots文件禁止收錄無效、重復頁面

網站很多重復內容,會降低搜索引擎的友好度,試想,如果網站的收錄只有那些無用的用戶注冊頁、公司簡介等,這樣的網站是不會給予權重的。又如,小小課堂網曾經因為WordPress結構問題,導致分頁頁面被收錄,這也會對網站造成不好的影響。

五、定期檢查死鏈

如果搜索引擎的蜘蛛在爬行過程中,遇到各種死鏈,那一定是非常不友好。所以,定期檢測死鏈,讓蜘蛛在我們的網站更順暢地爬行,才能更快更多收錄網站的文章。

六、內鏈優化

網站內鏈優化就像在小小課堂網的本篇內容,會融入很多以往的教程,可以讓以往的文章被蜘蛛爬行,獲得更多文章被收錄的機會。

七、定期定量發布文章

網站如果可以做到日更新,一般就可以了。當然如果每天更新很多篇文章也是可以的。切記不要大量採集,網站重復內容過多,可能會引起搜索引擎的降權。

關於是否需要每天在同一時間發文章,從搜索引擎蜘蛛友好度來講,固定時間發文章,是友好的表現。如果不定期發文章,蜘蛛會不知道您的網站在一天的哪個時間段發文章。

八、網站優秀的結構

在網站大面積使用flash、圖片和視頻等,一般都不能算是優秀的網站結構,不良的網站結構可能導致蜘蛛不能順利在網站爬行,是一種對搜索引擎不又好的表現。

網站的URL設計盡量精而短,且最好富有意義,鏈接中能帶有關鍵詞就最好了。

九、內容的時效性

網站內容要有一定的時效性,不能總發一些過時的內容。如站在Windows10的時代,網站卻一直在發一些Windows 98的知識。一定要跟上時代的腳步。

十、堅持

就算以上九條您都做的很好,最後一條做不好,前面做的工作全部都會是浪費時間。SEO本來就是一件長期堅持才會出明顯效果的事情。

7、nodejs開發的socket聊天室在性能優化方面有哪些可以做的

也就是說 步驟1-步驟2是一個流程,計時器是另外一個流程;
這里提供兩種方法去判斷步驟1是否完成:
1.在計時器里,每倒數1次就判斷是否已經是0(或步驟1是否完成).若完成,則執行步驟2;
2.單獨將每個步驟寫成方法,封裝和該方法返回值與參數列表均相同的委託,設計一個總開關.按下總開關的時候執行步驟1對應的委託,在步驟1的回調函數里執行步驟2,以此類推..而計時器單獨寫一個計數類,包含開始、暫停和繼續的方法,在每個步驟里去實例計數類的對象執行

8、如何利用node解決seo問題

<

9、node 在高並發下的性能優化,各位有哪些好的建議嗎

 有高並發優勢。
Node.js優點:
1、採用事件驅動、非同步編程,為網路服務而設計。其實Javascript的匿名函數和閉包特性非常適合事件驅動、非同步編程。
2、Node.js非阻塞模式的IO處理給Node.js帶來在相對低系統資源耗用下的高性能與出眾的負載能力,非常適合用作依賴其它IO資源的中間層服務。
3、Node.js輕量高效,可以認為是數據密集型分布式部署環境下的實時應用系統的完美解決方案。
4. 有高並發優勢。

10、網站優化:所有的js代碼放到同一個js文件中好,還是不同的頁面根據需要創建不同的js文件好?

網站優化:一個是壓縮合並css,js,一個是合並圖片和小圖標來達到減少請求量的目的;所以當然是所有的js代碼放到同一個js文件中好;需要注意的是:
1、只要命名不沖突放一個文件裡面完全沒問題,初始化代碼用一個$(function(){...})包裹著就可以了;
2、不同的頁面執行不同的邏輯代碼塊完全不沖突,關鍵是知道自己在做什麼;
具體做法:
1)比如a.css,b.css,c.css,把裡面的內容都復制到一個css中,main.css這樣手動就可以合並
壓縮的話,網上都有工具來壓縮,直接百度 css壓縮 就可以了;
2)js大部分是可以直接和css一樣手動合並,然後壓縮的(壓縮方法,和壓縮css一樣,百度去),不過要注意復制到文件時的順序,和代碼裡面的一些規范,不要把依賴什麼的搞混了;如果js文件非常多手動處理很麻煩的時候,可能需要藉助工具來實現,你可以試著用前端的一些載入器(require,seajs)來做一些優化,達到按需載入的目的,推薦用seajs試試;自動壓縮的話,可以用nodejs的grunt來壓縮,很好用。

與nodejsseo相關的知識