Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SPA SEO
Search
blue chen
February 27, 2014
Technology
900
12
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SPA SEO
at Happy designer meetup 2014.02.27
blue chen
February 27, 2014
More Decks by blue chen
See All by blue chen
RelaJet Caption
iamblue
0
190
The future of hearing device - 聽覺領域新的機會及挑戰
iamblue
2
310
20180918-Digitime 導入MCU設計 催熟智慧語音辨識應用市場
iamblue
0
320
Pixnet hackthon - workshop
iamblue
0
190
AI 人工智慧學校分享
iamblue
0
500
Javascript -Full stack 物聯網開發
iamblue
0
210
MCS Lite 私有雲物聯網開發
iamblue
0
360
Blockchain for IoT 應用
iamblue
1
320
2017.01.16 Embedded system
iamblue
0
200
Other Decks in Technology
See All in Technology
書き手が人でもAIでも正しくなる道、SREを埋め込んだDeveloper Platform / tech drivers day8
chmikata
4
890
自律的なチームを作るためにTechPMがやらないこと
ny7760
0
450
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
3
720
200人の配信コメント、 全部Jevが仕分けます 〜 マサカリガードを作ってみた 〜
katayamatg
1
500
GitHub、使う?使わない?
happysamurai294
0
140
ALBのLCU予約とトラフィックの波によるプロダクト理解 / Understanding ALB LCU and Traffic Spikes
mito201
1
130
素人でもできた!AIを使った短編小説創作入門
delhi09
PRO
0
280
AIコーディングはじめました
miso
0
130
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
0
6.6k
複雑な業務システムを高速でつくるため、チーム全員をつくれる人へ
ayakurabuchi
0
120
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
210
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
530
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
760
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Building AI with AI
inesmontani
PRO
1
1.4k
Optimising Largest Contentful Paint
csswizardry
37
4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
570
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Typedesign – Prime Four
hannesfritz
42
3.2k
Transcript
I am Blue Web engineer @ YouMeb
⽤用nginx 1. SEO基礎 本⽇日⼤大綱 2. How to make SPA app
SEO friendly 3. 如何⾃自動化部屬SEO內容? 4. 溫馨⼩小提醒
SEO 基礎
Web Crawler
講到蜘蛛...我就想到.... 三級的天擎坦克被它摧毀了T.T 蜘蛛好像很厲害?
! SEO crawler 並⾮非很聰明
<html> <head> <title>這是title</title> </head> <body> <h1>Hello World!</h1> </body> </html> <html>
<head> <title>{{ title }}</title> </head> <body> <script> //do some ajax awesome thing.. </script> </body> </html> 靜態網⾴頁(無ajax) 靜態網⾴頁(有ajax)
So…要如何告訴這些 Crawler 你的網站是⽀支持AJAX呢?
www.example.com/ajax.html#mystate 網址有兩種 ! www.example.com/mystate 無hash: 有hash: 如何告訴這些 Crawler 你的網站是⽀支持AJAX呢? www.example.com/#/mystate
www.example.com/ajax.html#mystate 從網址下⼿手(有hash) 1. www.example.com/ajax.html#!mystate
www.example.com/ajax.html#!mystate 當 Crawler 收到要爬這段網址內容時 www.example.com/ajax.html?_escaped_fragment_=mystate 會對你的server發⼊入下列request (以google crawler 為例)
www.example.com/ajax.html?_escaped_fragment_=mystate 你的server接受到這樣的訊息時 回傳 crawler 對應的 SEO Data page/內容 (以google crawler
為例)
從網址下⼿手(無hash) 2. <meta name=”fragment” content=”!”> 請在<head>加⼊入: www.example.com?_escaped_fragment_=mystate (以google crawler 為例)
AngularJS解法 3. 有hash: 無hash: <meta name=”fragment” content=”!”>
! ⽩白話理解 crawler 對server請求流程
None
google/facebook crawler your app server www.example.com/mypage#!home 會發出⼀一段特殊的請求網址 回傳 SEO data
rendering page
Make SPA app SEO friendly
多數的語⾔言 framework 框架 SPA SEO 解決⽅方案
<html> <head> <title><%= title %></title> </head> <body> <h1>Hello World!</h1> </body>
</html> 當餵給crawler前,SEO Data 被先在server端印好輸出 Nodejs EJS <html> <head> <title>hello</title> </head> <body> <h1>Hello World!</h1> </body> </html> Nodejs 印出這些變數 crawler res.render({title:’hello’});
每個使⽤用者進來都會先經過SEO data Output 缺點 浪費資源
加上...如果前端的⾴頁⾯面只是靜態檔案怎辦? (像是yeoman產⽣生的app)
還是要有⼀一個東⻄西去處理餵給crawler SEO data 2. 架⼀一個nodejs server 處理(網址複雜) 1. 直接nginx指向(網址簡單) 3.
nodejs+nginx
直接nginx處理 但網址複雜很⿇麻煩
⼀一台 nodejs server 直接來
nginx + nodejs nginx 過濾來⾃自crawler 還是 user ? nodeJS 處理rending
page
nginx 靜態⾴頁⾯面路徑 SEO server ⼀一般使⽤用者 crawler nodejs server 處理 SEO
data render
Nginx設定 你的處理SEO data render Nodejs server位置 因為各家的crawler發出請求格式不⼀一 最好⽅方式是⽤用user agent在經過nginx時過濾
live demo
如何⾃自動化部屬SEO內容
⽤用nginx facebook . google friendly SEO data內容 image, title,url, description,og系列
! 那網站內容呢?
html-snapshots 1. use phantomJS 2. ⽀支援輸出 sitemap.xml, robots.txt,
arbitrary input 3. 有grunt版本
$ npm install grunt-html-snapshot
None
網站圖⽚片截圖:https://github.com/clkao/prerender-opengraph-image
live demo
溫馨⼩小提醒
⽤用nginx 知此知彼 https://support.google.com/webmasters/answer/164734?hl=zh-Hant 了解 SEO也要了解 search engine policy
End.