發表文章

部落格搬家摟

謝謝大家的支持,我的部落格搬家了 Summer。桑莫。夏天 https://cythilya.github.io 對於過去一年也整理了-2016總回顧 https://cythilya.github.io/2017/02/04/2016-yearly-review 當初會寫這個部落格是因為前輩的建議(她目前是一位很受歡迎的youtuber)。她說,寫部落格除了能對自己技能的檢視外,也是未來找工作的作品集之一。很感謝她的建議,為了每個月能順利產出文章,除了規劃技能精進的項目、時程、不斷要求自己多看多想而真的有持續很大的進步外,找工作也非常好用,還有些工作是由部落格連繫到小妹我本人的--在這裡也跟這位前輩再次感謝。 希望在新的一年,我的技術能更上一層樓,和大家也有更深刻的交流。

網站如何控制索引範圍?

網站如何控制索引範圍? 過去在操作規模較小的網站時,重點往往是增加網站的網頁索引數,但操作大型網站除了增加索引數外,更重要的是引導搜尋引擎爬取正確的路線/頁面,意即有效控制索引範圍。一方面是不浪費索引的額度(Google對每個網站都有一定的索引額度),另一方面也是不增加我們網站本身的流量負擔(CDN等也是很貴的)。 網站結構 避免重要頁面埋得太深而不易被索引,重要的頁面離首頁愈近愈好,愈多內部連結連到愈好。 網址結構 三層以後的網址易被robot忽略。例如: http://sample/abc/def/ghi ,其中「def」是第三層,「ghi」是第四層。網址太長可能會遭到robot捨棄。但根據我的觀察,這樣的狀況是很少的,但如果使用site指令是可以發現有這樣的狀況,超過某個長度後的網址便不完全比對。 因此,重要的頁面要放在三層以內,確保網址不會因為太長而被捨棄索引。 內部連結要妥善設計,必要時加上nofollow 避免robot迴圈般的爬取網址,或爬某個需要登入或偽連結,導致連不到重點和深層連結。 為什麼我會注意到這個問題呢?因為在Search Console上,我常看到報錯上顯示一個很有趣的狀況... 網站上有些功能是需要登入才能使用的,因此當點擊這個連結的時候,如果使用者沒有登入,就會回傳登入頁面。若是robot做這個動作,它就會看到soft 404,也就是想要找的頁面不見了,但又沒有回傳404。 這樣的功能問題在我們網站上好像挺多的,例如:商品檢舉(登入後,點擊商品檢舉連結,會跳到填寫檢舉表單頁)--我常常看到一種報錯--soft 404,來源是某個需要登入的連結,範例: http://goods.ruten.com.tw/item/violate.htm?123456789 ,這就是因為robot在爬這個商品頁時,遇到這個連結,跟著進去發現需要登入(被轉址導到登入頁)而產生的。這種浪費robot時間資源、對自己網站產生無謂流量的狀況應該要盡量避免。 解決辦法,最簡單的就是當使用者沒有登入的時候,就不要顯示這個連結;或是,在這個連結上加入 「nofollow」,明確告知robot不要去爬。 canonical 網站格式統一,避免同一頁但不同網址的頁面競爭排名。使用canonical可能會導致網站總索引數下降,但

ES6 - let, const, Block-Level Scope

ES6 - let, const, Block-Level Scope let, const, var, function declaration, block-level scope, hoisting 相關筆記。 let 變數宣告,功能類似 var ,但有以下特性: block-level scope (塊級作用域) 沒有 hoising (變量提升) temporal dead zone, TDZ:宣告後才能使用 不允許重複宣告 const 常數宣告,有以下特性: 對於 primitives 的變數,宣告後就不能改變值,因此宣告時一定要設值,並且變數名指向資料;對於非 primitives 的變數,變數名指向資料所在的 address,不可重新賦值但可改變該 address 的內容 block-level scope 沒有 hoising temporal dead zone, TDZ 不允許重複宣告 Block-Level Scope 塊級作用域 javascript 只有 global 和 function 兩種 scope,意即若使用 var 與 function 做變數宣告,只能將變數的活動範圍限制在全域或函數中,這可能會產生非預期的結果。 例如:使用 var 宣告 i 當成 for loop 的 counter,當 i 離開 for loop 後,仍可被存取,因此得到 a[6]() 為 10。 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); //10 改用 ES6 即可解決這樣的問題,let (和 const)有 block-level scope 特性,離開大括號({...})的範圍後便失效。 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[2](); //2 Top-Level LexicalEnvironment Top-Level LexicalEnviro

利用Prerender Node為SPA做SEO

圖片
利用Prerender Node為SPA做SEO 圖片來源: Wake Up, SEOs – the NEW New Google is Here 。 繼 利用PhantomJS為SPA做SEO 又來一個為SPA解決SEO問題的解法。

利用PhantomJS為SPA做SEO

圖片
利用PhantomJS為SPA做SEO 隨著前端技術的不斷更新,使用前端框架(React、Vue等)來建構網站是普遍現象。但目前搜尋引擎無法有效讀取使用JavaScript render出來的頁面,且使用 AJAX Crawling 的解法只適用於Google又此法已被廢棄,因此另一解法就是使用PhantomJS。 這裡使用 Node.js + PhantomJS 為SPA/以Ajax讀取資料的頁面做SEO。

Node.js 中使用 Promise Q

在 Node.js 中使用 Promise Q 假設我們今天要執行一項工作task 3,但執行task 3之前要先依序完成工作task 2與task 1。 如果沒有使用promise,而用callback的方式完成,程式碼大概會是這樣... task1(function (value1) { task2(value1, function(value2) { task3(value2, function(value3) { //do something with value3... }); }); }); 要做(依賴)的事情愈多,深度就愈深,完全就是callback hell了。

加速行動版網頁(AMP, Accelerated Mobile Pages)

圖片
加速行動版網頁(AMP, Accelerated Mobile Pages) 加速行動版網頁(AMP, Accelerated Mobile Pages)是Google推出的一套框架,用來使行動裝置網頁能快速載入。 在Search Console上會看到提示建議Webmaster使用與提交這樣的頁面。