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 から SSR に変換)
Search
gree_tech
PRO
November 11, 2021
Technology
710
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
比較サイトの検索改善(SPA から SSR に変換)
GREE Tech Conference 2021 で発表された資料です。
https://techcon.gree.jp/2021/session/Session-3
gree_tech
PRO
November 11, 2021
More Decks by gree_tech
See All by gree_tech
1on1、進捗確認だけになっていませんか?〜明日から使えるTips〜
gree_tech
PRO
0
10
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
990
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
1.1k
ゲームにおけるメディアミックス展開との向き合い方 -ヘブンバーンズレッドのメディアミックス企画の立て方-
gree_tech
PRO
0
1.1k
課題発見から始めるプロダクト密着型TA組織立ち上げ 〜小規模TAチームが3Dアセットの生産性を倍にした方法〜
gree_tech
PRO
0
1.1k
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
990
20年続く長寿タイトルが、15年目にして売上を伸ばせた理由
gree_tech
PRO
0
1.6k
我々はどう生きるか
gree_tech
PRO
2
1.1k
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
5.6k
Other Decks in Technology
See All in Technology
Codex概要
ymiya55
0
140
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
プラットフォームを「作る」、 チームに「入り込む」
sansantech
PRO
0
420
The seven pitfalls of AI (revised version)
ufried
0
170
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
140
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
340
猫でもわかるKiro Web
kentapapa
1
160
2026-09-26 Platform Engineering Kaigi 2026 インフラとアプリの境界線と委譲の設計 / Drawing the Infra and App Line
masasuzu
0
550
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
2
340
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
710
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.5k
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
620
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
540
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Making the Leap to Tech Lead
cromwellryan
135
10k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Into the Great Unknown - MozCon
thekraken
41
2.7k
4 Signs Your Business is Dying
shpigford
187
23k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Typedesign – Prime Four
hannesfritz
42
3.2k
Utilizing Notion as your number one productivity tool
mfonobong
4
610
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Transcript
比較サイトの検索改善 (SPAからSSRに変換) アウモ株式会社 サーバーサイドエンジニア 天野桂輔
• 名前 • 天野 桂輔 • 担当 • サーバーサイドエンジニア •
Ruby on Rails、Nuxt.js • 経歴 • 2013- グリー株式会社 • GREE Platform 部に所属 • 2020- アウモ株式会社 • 比較サイト、aRM※の開発担当 ※CRMツール 自己紹介 2
aumoはご存知ですか? ⓘ Start presenting to display the poll results on
this slide.
4 aumoってどんなサービス? 国内最大級のおでかけ情報サービス 1300万 500万 月間ユーザー数 アプリDL数 50万 掲載記事数 総口コミ数
50万 掲載メディア数 500
5 aumoってどんなサービス? Web記事 SEOに最適化された コンテンツ制作 Web記事 Web記事 Web記事 位置情報、閲覧傾向を利用 レコメンドシステム
App ユーザーの口コミを活用 おでかけCGM Web施設
6 Web記事 カテゴリ 技術スタック プログラム言語 / FW Ruby / Ruby
on Rails インフラ AWS データベース MySQL, Redis, Memcached, DynamoDB 監視 Datadog, Papertrail, PagerDuty 分析 Bigquery, PoT ※社内分析ツール 検索エンジン ElasticSearch コード管理 GitHub Web記事 SEOに最適化された コンテンツ制作 Web記事
7 App Web記事 カテゴリ 技術スタック プログラム言語 / FW Ruby /
Ruby on Rails, Swift, Kotlin, Python インフラ AWS データベース MySQL, Redis, Memcached, DynamoDB, FireStore Database 監視 Datadog, Papertrail, PagerDuty, Firebase 分析 Bigquery, PoT ※社内分析ツール 検索エンジン ElasticSearch 機械学習 SageMaker, fastText コード管理 GitHub 位置情報、閲覧傾向を利用 レコメンドシステム App
8 Web施設 Web記事 カテゴリ 技術スタック プログラム言語 / FW Ruby /
Ruby on Rails, Vue.js, Nuxt.js インフラ AWS データベース MySQL, Redis, Memcached, DynamoDB 監視 Datadog, Papertrail, PagerDuty, Sentry 分析 Bigquery, PoT ※社内分析ツール 検索エンジン ElasticSearch コード管理 GitHub Web施設 ユーザーの口コミを活用 おでかけCGM
9 比較サイトとは? Web記事 Web記事 位置情報、閲覧傾向を利用 レコメンドシステム App ユーザーの口コミを活用 おでかけCGM Web施設
Web記事 SEOに最適化された コンテンツ制作 Web記事
10 施設情報を提供するサービス 比較サイトとは? • 施設 • 基本情報、写真、口コミ • 検索 •
ジャンル×エリア×カテゴリで施設を検索 ホテル グルメ レジャー・観光 チラシ・ショッピング
11 構成 フロントエンド バックエンド ELB 同一インスタンスに搭載 サブドメイン
12 当初のフロントエンド設計 UXを優先したSPAという方法を採用
13 Single Page Application SPA ページ遷移することなく同一のページ内でコンテンツのみ切り替 え サーバー ELB クライアント
①リクエスト ③レスポンス ②コンテンツ生 成 ④JSをブラウザで実行 ※2回目以降は差分のみリクエスト するため処理が早い
14 SPA • メリット • 2回目以降は差分のデータのみを要求するため早い • デメリット • 初回のページ読み込みが遅い
Single Page Application
15 比較サイトの成長に伴い、初回読み込みの遅延が顕著に。。。
16 特に、施設の検索が遅い
17 検索の課題 • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策
18 検索の課題 • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策
19 コンテンツ表示までの速度 検索の課題 • コンテンツ生成が非同期 • レンダリングに時間がかかる
20 検索の課題 • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策
21 検索エンジン最適化(SEO)対策 検索の課題 • コンテンツ生成が非同期で評価できない • Web記事はSEOに強い • ノウハウを共有したい Web記事
SEOに最適化された コンテンツ制作 Web記事
22 検索の課題 • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策 解決策:SPAからSSR(同期生成)に仕様変更
23 Server Side Rendering SSR Webページのレンダリングをブラウザの代わりにサーバ上で行う サーバー ELB クライアント ①リクエスト
③レスポンス ②コンテンツ生 成 ・HTML生成 ・JS実行 ※ Node.js必要 ④コンテンツ表 示 ※画面の表示において有用な アプリケーションの機能
24 SSR • メリット • 画面の表示が早い • デメリット • サーバー側の負荷が高い
• Node.js サーバー環境が必要 Server Side Rendering
25 つまり
26 SPAからSSR(同期生成)に仕様を変更することで • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策 を改善できる
27 仕様変更 • 検索処理 • Vue components 内 mounted 時に実行
• しかも、ジャンル毎に似たような処理がある... mounted () { return this.search() }, search () { const page = this.$route.query.page || 1 : 検索パラメータ設定 : this.searchGourmetAction({ searchQuery, page }) // store経由でAPIリクエスト } 変更前
28 Life Cycle NuxtJS nuxt ServerInit Route Middleware fetch() asyncData()
created() fetch() mounted() validate() ・初回アクセス時に実行される ・ストアに事前にデータを格納する ☆ page components のみ利用可能 ★ 全ての Vue components で利用可能 ・条件の設定やチェックを行う ・page リダイレクトに利用 ☆ 動的ルーティングのパラメータを検証 Vuex store component data ☆ page レンダリング前にデータを取得 ★ Vue インスタンスが生成されたときに呼び出される ★ Vue インスタンスが生成された後に呼び出される ★ DOM がレンダリングされたときに呼び出される
29 Life Cycle NuxtJS nuxt ServerInit Route Middleware fetch() asyncData()
created() fetch() mounted() validate() DOM がレンダリングされた後に検索
30 Life Cycle NuxtJS nuxt ServerInit Route Middleware fetch() asyncData()
created() fetch() mounted() validate() page レンダリング前に検 索
31 ① 検索処理の移行 仕様変更 • 検索処理 • page components 内
fetch 時に実行 • page 全てに同様の処理を置くのは微妙なので... async fetch ({ app, route }) { return await Promise.all([ app.$categorySearch({ route }) ]) },
32 ② 検索処理の共通化 仕様変更 • plugin 利用 • ジャンル毎の検索処理を共通化 export
default ({ store, req }, inject) => { inject('categorySearch', async ({ route }) => { const page = route.query.page || 1 switch (process.host) { case process.env.GOURMET_DOMAIN: : 検索パラメータ設置 : await store.dispatch('gourmetSearch/searchGourmetAction', { searchQuery, page }) break : } }) } ※ ブラウザ環境に帰属するオブジェクト(window, document)にはアクセス不可
33 ③ 検索ページ導線を変更 仕様変更 • 検索ページへの遷移処理を修正 • <NuxtLink>によるページ遷移はクライアント側で実行 • ブラウザをハード再読み込みしてサーバーへリクエスト
34 まとめ
35 改善項目 • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策
36 改善項目 • コンテンツ表示までの速度 • リクエストからコンテンツ表示までの速度:55~62%⬇ • 検索エンジン最適化(SEO)対策
37 改善項目 • コンテンツ表示までの速度 • 検索エンジン最適化(SEO)対策 • 初回読み込み時に全てのコンテンツを生成
38 改善項目 • コンテンツ表示までの速度 • リクエストからコンテンツ表示までの速度:55~62%⬇ • 検索エンジン最適化(SEO)対策 • 初回読み込み時に全てのコンテンツを生成
39 学び
40 NuxtJS • SSR導入は困難ではない • Node.js サーバー環境を準備 • Nuxt Life
Cycle 理解 ※クライアント、サーバーの処理 • 同様の課題があるサービスに有用 • ページ単位で導入も可能
41 引き続きより良いサービス作りを心掛けていきます これからもaumoを宜しくお願いしますmm
42