SlideShare a Scribd company logo
1 of 24
Download to read offline
X p re s s E n g i n eX E H u b
XE3
SEO
Handling
1. SEO?

2. XE3 SEO 설정

3. SEO를 다루는 XE3 코드 소개
4. SEO 처리 개선 - SeoUsable
SEO ?
검색 엔진 최적화 (Search Engine Optimization)
웹사이트의 콘텐츠가 검색엔진에 잘 색인 될 수 있도록 하는 작업
검색엔진이 웹사이트 페이지의 요약정보를 잘 해석할 수 있도록 해야 함
용어
SEO 검색 엔진 최적화 (Search Engine Optimization)
검색엔진 네이버, 구글 등의 포털 서비스
요약정보
페이지의 제목, 내용 등이 정리된 정보
Meta 태그
Open Graph
제목, 설명, 링크, 미리보기 이미지등을 Meta 태그에 표시하는 방법을 정의한 규칙
SNS에 웹사이트 페이지 공유할 때 사용
서드파티 사용자가 추가한 XE3 플러그인
SEO
Handling
요약정보를 어떻게 다룰 것인가?
어떤 설정을 통해 요약정보를 만들 것인가?
어떻게 하면 좀 더 효율적으로 SEO를 처리할 수 있을까?
웹사이트 구성
제목
주소
내용
검색엔진이 해야할 일
여기서 뭐를 인덱싱 해야하는거야?
요약정보를 찾자
SNS 에 공유할 때 Open Graph 사용
페이스북
XE3 사이트 기본 설정
SEO 설정
SEO를 다루는 XE3 코드 소개
Key-Words
Frontend
Frontend 는 css, js, image 등 asset 관리
페이지 출력에 필요한 파일을 효율적으로 관리
할 수 있는 기능 제공
HTML 관련 Tag 처리
Presenter
사용자 Request에 대한 HTML Response 처
리에 필요한 Theme, Skin, SEO 기능 실행
페이지 출력 처리
SEO
Presenter 에서 HTML 반환할 때 실행
서드파티가 SEO 처리를 커스터마이징 할 수
있도록 기능 제공
SEO 처리
Frontend Tags
Frontend Importer
FrontendHandler
BodyClass
HtmlPresenter JsonPresneter
Presenter
CSSFile Html IconFile JSFile Meta
Package Preload RouteTitle Translation
Frontend::Title()
XeFrontend::title('site title');
PHP
Meta 태그 수정
description, keyword 등록
XeFrontend::meta('description')->property('description')-
>content('description')->load();
XeFrontend::meta('keyword')->property('keyword')->content('keyword)-
>load()
// open graph 관련 정보 등록 또는 수정
XeFrontend::meta('og:type')->property('og:type')->content('article')->load();
XeFrontend::meta('og:description')->property('og:description')-
>content('descrption')->load()
// open graph 관련 정보 출력 제외
XeFrontend::meta('og:type')->unload()
PHP
* 시스템에서 정의된 Meta 태그를 수정할 수 있음
* XeFrontend::meta() 로 Meta 태그를 추가, 수정, 삭제할 수 있음
* Meta 태그 추가
* XeFrontend::meta()->property('description')-
>content('등록 내용')->load();
* Meta 태그 수정
* XeFrontend::meta('description')-
>property('description')->content('등록 내용')->load();
* Meta 태그 삭제
* XeFrontend::meta(‘description')->unload();
Meta 태그 수정
서버
사용자 컴퓨터
사용자 컴퓨터
HTML 문서
서버
Controller
Presenter
Frontend
SEO
XeFrontend::meta('og:type')->property('og:type')->content('article')->load();
PHP key property value content value
SEO Importer
Seo Importer
SEO (SeoHanlder)
BasicImporter OpenGraphImporter TwiterCardImporter
SeoHandler::addImporter()
Custom Importer 추가
* SEO-importer 는 XE3 에서 SEO 관련 처리를 담당하는 클래스
* 기본으로 Basic, OpenGraph, TwitterCard Impoert 제공
* Basic 은 keyword, descreiption 처리
* OpenGraph 는 og:* 처리
* 서드파티가 AbstractImporter 클래스를 만들고
SeoHandler::addImporter()
* Custom Importer 로 각 웹사이트에 맞게 구성할 수 있음
SEO 처리 개선
서버
사용자 컴퓨터
사용자 컴퓨터
HTML 문서
서버
Controller
Presenter
Frontend
SEO
SEO 처리 개선
서버
사용자 컴퓨터
사용자 컴퓨터
HTML 문서
서버
Controller
Presenter
Frontend
SEO
Model(Database)
*출력되는 Model 에서 SEO 처리
*데이터가 출력될 때 SEO를 처리할 수 있도록 해서 시스템에서 SEO가 자동으로 처리되도록 함
*게시판 Board Model 의 SEO 처리 예시
*게시판 게시물 내용 페이지에서 플러그인, 컨트롤러, 뷰 가 SEO를 처리하지 않고 Model 이 처리함
*게시판에서 출력되는 내용이 있는 경우 XE3에서 자동으로 SEO 설정
*SeoUsable
*Board Model 은 SeoUsable 을 구현했음
*getTitle(), getDescription(), getKeyword() .. 등 으로 구성됨
*SeoUsable 의 구현체가 출력될 때 XE3가 해당 인터페이스 실행
*화면 출력하기 전에 SeoHandler가 Presenter의 data를 확인해서 SeoUsable 이 있는 경우 SEO
Page Plugin 개선
제목, 설명이 반영되지 않음
SeoUsable 구현
// plugins/page/src/Models/PageModel.php
use XpressengineSeoSeoUsable;
...
class PageModel extends Document implements CommentUsable, SeoUsable
...
/**
* Returns title
*
* @return string
*/
public function getTitle()
{
$title = str_replace('"', '"', $this->getAttribute('title'));
return $title;
}
PHP
Model 기준으로 SEO 처리
PageModel 이 사용되는 모든 페이지에서 SEO 자동으로 처리
T h a n k y o u
X E H U B

More Related Content

Similar to XE3 SEO를 다루기 - XE Open seminar #2

알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
 
XE Open seminar 테마만들기
XE Open seminar 테마만들기XE Open seminar 테마만들기
XE Open seminar 테마만들기Sungbum Hong
 
robot.txt와 meta tag를 이용한 크롤링 설정
robot.txt와 meta tag를 이용한 크롤링 설정robot.txt와 meta tag를 이용한 크롤링 설정
robot.txt와 meta tag를 이용한 크롤링 설정Yoonsung Jung
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리라한사 아
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리봉조 김
 
GMS 프로젝트 - Flutter
GMS 프로젝트 - FlutterGMS 프로젝트 - Flutter
GMS 프로젝트 - FlutterJongmini
 
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개XpressEngine
 
JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제Lee Sang-Ho
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복sung hwan Park
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복Mu-ik Jeon
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판hyeonjae Cheon
 
01. basic html5
01. basic html501. basic html5
01. basic html5동우 주
 
Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!Sue Hyun Jung
 

Similar to XE3 SEO를 다루기 - XE Open seminar #2 (20)

Portfolio
PortfolioPortfolio
Portfolio
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
XE Open seminar 테마만들기
XE Open seminar 테마만들기XE Open seminar 테마만들기
XE Open seminar 테마만들기
 
2-2. html5
2-2. html52-2. html5
2-2. html5
 
robot.txt와 meta tag를 이용한 크롤링 설정
robot.txt와 meta tag를 이용한 크롤링 설정robot.txt와 meta tag를 이용한 크롤링 설정
robot.txt와 meta tag를 이용한 크롤링 설정
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
GMS 프로젝트 - Flutter
GMS 프로젝트 - FlutterGMS 프로젝트 - Flutter
GMS 프로젝트 - Flutter
 
Hibernate 기초
Hibernate 기초Hibernate 기초
Hibernate 기초
 
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
 
JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제JSP 프로그래밍 2014-2018년 기말시험 기출문제
JSP 프로그래밍 2014-2018년 기말시험 기출문제
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복
 
하이브리드앱 성능 극복
하이브리드앱 성능 극복하이브리드앱 성능 극복
하이브리드앱 성능 극복
 
Django View Part 1
Django View Part 1Django View Part 1
Django View Part 1
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판
 
블로그꾸미기
블로그꾸미기블로그꾸미기
블로그꾸미기
 
01. basic html5
01. basic html501. basic html5
01. basic html5
 
Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!Daum5강 당신도 파워블로거가 될 수 있어요!
Daum5강 당신도 파워블로거가 될 수 있어요!
 

More from XpressEngine

Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2XpressEngine
 
Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3XpressEngine
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXpressEngine
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기XpressEngine
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩XpressEngine
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기XpressEngine
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들XpressEngine
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게XpressEngine
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기XpressEngine
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7XpressEngine
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래XpressEngine
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기XpressEngine
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로XpressEngine
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략XpressEngine
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기XpressEngine
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXpressEngine
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XpressEngine
 

More from XpressEngine (20)

Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
 
Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynote
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning Laravel
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
 

XE3 SEO를 다루기 - XE Open seminar #2

  • 1. X p re s s E n g i n eX E H u b
  • 2. XE3 SEO Handling 1. SEO?
 2. XE3 SEO 설정
 3. SEO를 다루는 XE3 코드 소개 4. SEO 처리 개선 - SeoUsable
  • 3. SEO ? 검색 엔진 최적화 (Search Engine Optimization) 웹사이트의 콘텐츠가 검색엔진에 잘 색인 될 수 있도록 하는 작업 검색엔진이 웹사이트 페이지의 요약정보를 잘 해석할 수 있도록 해야 함
  • 4. 용어 SEO 검색 엔진 최적화 (Search Engine Optimization) 검색엔진 네이버, 구글 등의 포털 서비스 요약정보 페이지의 제목, 내용 등이 정리된 정보 Meta 태그 Open Graph 제목, 설명, 링크, 미리보기 이미지등을 Meta 태그에 표시하는 방법을 정의한 규칙 SNS에 웹사이트 페이지 공유할 때 사용 서드파티 사용자가 추가한 XE3 플러그인
  • 5. SEO Handling 요약정보를 어떻게 다룰 것인가? 어떤 설정을 통해 요약정보를 만들 것인가? 어떻게 하면 좀 더 효율적으로 SEO를 처리할 수 있을까?
  • 7. 검색엔진이 해야할 일 여기서 뭐를 인덱싱 해야하는거야?
  • 9. SNS 에 공유할 때 Open Graph 사용 페이스북
  • 12. SEO를 다루는 XE3 코드 소개
  • 13. Key-Words Frontend Frontend 는 css, js, image 등 asset 관리 페이지 출력에 필요한 파일을 효율적으로 관리 할 수 있는 기능 제공 HTML 관련 Tag 처리 Presenter 사용자 Request에 대한 HTML Response 처 리에 필요한 Theme, Skin, SEO 기능 실행 페이지 출력 처리 SEO Presenter 에서 HTML 반환할 때 실행 서드파티가 SEO 처리를 커스터마이징 할 수 있도록 기능 제공 SEO 처리
  • 14. Frontend Tags Frontend Importer FrontendHandler BodyClass HtmlPresenter JsonPresneter Presenter CSSFile Html IconFile JSFile Meta Package Preload RouteTitle Translation
  • 16. Meta 태그 수정 description, keyword 등록 XeFrontend::meta('description')->property('description')- >content('description')->load(); XeFrontend::meta('keyword')->property('keyword')->content('keyword)- >load() // open graph 관련 정보 등록 또는 수정 XeFrontend::meta('og:type')->property('og:type')->content('article')->load(); XeFrontend::meta('og:description')->property('og:description')- >content('descrption')->load() // open graph 관련 정보 출력 제외 XeFrontend::meta('og:type')->unload() PHP * 시스템에서 정의된 Meta 태그를 수정할 수 있음 * XeFrontend::meta() 로 Meta 태그를 추가, 수정, 삭제할 수 있음 * Meta 태그 추가 * XeFrontend::meta()->property('description')- >content('등록 내용')->load(); * Meta 태그 수정 * XeFrontend::meta('description')- >property('description')->content('등록 내용')->load(); * Meta 태그 삭제 * XeFrontend::meta(‘description')->unload();
  • 17. Meta 태그 수정 서버 사용자 컴퓨터 사용자 컴퓨터 HTML 문서 서버 Controller Presenter Frontend SEO XeFrontend::meta('og:type')->property('og:type')->content('article')->load(); PHP key property value content value
  • 18. SEO Importer Seo Importer SEO (SeoHanlder) BasicImporter OpenGraphImporter TwiterCardImporter SeoHandler::addImporter() Custom Importer 추가 * SEO-importer 는 XE3 에서 SEO 관련 처리를 담당하는 클래스 * 기본으로 Basic, OpenGraph, TwitterCard Impoert 제공 * Basic 은 keyword, descreiption 처리 * OpenGraph 는 og:* 처리 * 서드파티가 AbstractImporter 클래스를 만들고 SeoHandler::addImporter() * Custom Importer 로 각 웹사이트에 맞게 구성할 수 있음
  • 19. SEO 처리 개선 서버 사용자 컴퓨터 사용자 컴퓨터 HTML 문서 서버 Controller Presenter Frontend SEO
  • 20. SEO 처리 개선 서버 사용자 컴퓨터 사용자 컴퓨터 HTML 문서 서버 Controller Presenter Frontend SEO Model(Database) *출력되는 Model 에서 SEO 처리 *데이터가 출력될 때 SEO를 처리할 수 있도록 해서 시스템에서 SEO가 자동으로 처리되도록 함 *게시판 Board Model 의 SEO 처리 예시 *게시판 게시물 내용 페이지에서 플러그인, 컨트롤러, 뷰 가 SEO를 처리하지 않고 Model 이 처리함 *게시판에서 출력되는 내용이 있는 경우 XE3에서 자동으로 SEO 설정 *SeoUsable *Board Model 은 SeoUsable 을 구현했음 *getTitle(), getDescription(), getKeyword() .. 등 으로 구성됨 *SeoUsable 의 구현체가 출력될 때 XE3가 해당 인터페이스 실행 *화면 출력하기 전에 SeoHandler가 Presenter의 data를 확인해서 SeoUsable 이 있는 경우 SEO
  • 21. Page Plugin 개선 제목, 설명이 반영되지 않음
  • 22. SeoUsable 구현 // plugins/page/src/Models/PageModel.php use XpressengineSeoSeoUsable; ... class PageModel extends Document implements CommentUsable, SeoUsable ... /** * Returns title * * @return string */ public function getTitle() { $title = str_replace('"', '"', $this->getAttribute('title')); return $title; } PHP
  • 23. Model 기준으로 SEO 처리 PageModel 이 사용되는 모든 페이지에서 SEO 자동으로 처리
  • 24. T h a n k y o u X E H U B