TIP게시판

제목 SEO 관련 고민을 하다가
글쓴이 천재작곡가 작성시각 2015/11/06 10:25:49
댓글 : 3 추천 : 2 스크랩 : 1 조회수 : 7596   RSS
Hook을 이용한 레이아웃 사용중
SEO를 더 간편하게 넣을수 없을까 고민하다가 라이브러리를 한번 만들어봤습니다.
아직 초짜의 실력이라, 좋은코딩은 아니지만
고수님들의 조언을 얻을수 있을까 하고 한번 올려봅니다. 감사합니다!

◎ appliction/config/site_config.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/**************************************************
 * 
 * SEO 를 위한 메타 태그 설정
 * 
 **************************************************/
$config['site_title'] = '싱투미!';
$config['site_keywords'] = '싱투미,Single';
$config['site_robot'] = 'index,follow';

◎ application/config/autoload.php
$autoload['config'] = array('site_config');

◎ application/libraries/Seo.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Seo {
	
	private $title 		= NULL;	// <title>$title</title>
	private $desc 		= NULL;	// <meta name="description" contents="$desc">
	private $keywords 	= NULL;
	private $charset 	= NULL;
	private $robots		= NULL;
	private $og_title 	= NULL;
	private $og_type 	= NULL;
	private $og_img		= NULL;
	private $og_url		= NULL;
		
	/********************************************************************************************
	 * 생성자
	 *******************************************************************************************/
	function __construct($data = array()) {
		
		$CI =& get_instance();
		
		$this->title 	= $CI->config->item('site_title');
		$this->keywords = $CI->config->item('site_keywords');
		$this->charset 	= $CI->config->item('charset');
		$this->robots	= $CI->config->item('robots');
		
		$this->set_meta($data);
	}
	
	/********************************************************************************************
	 * 배열 설정을 메타로 한번에 설정한다.
	 *******************************************************************************************/
	public function set_meta($meta = array()) {
		
		foreach($meta as $key=>$val) {
			
			if($key === "title") {
				// 타이틀일 경우에만 사이트 타이틀을 붙여준다.
				$this->set_title($val);
			}
			else {
				$this->$key = $val;
			}
		}
	}
	
	
	/********************************************************************************************
	 * 페이지 타이틀을 변경합니다.
	 *******************************************************************************************/
	public function set_title($title) {
		$CI =& get_instance();
		$this->title = $title . ' - ' . $CI->config->item('site_title');
	}
	
	
	/********************************************************************************************
	 * 현재 설정값을 이용하여 세팅된 Meta 태그값을 내보냅니다.
	 * 
	 * @return String $output 세팅된 Meta 태그
	 *******************************************************************************************/
	public function output(){
		
		$output = "<meta chaset='{$this->charset}'>"
				. "<title>{$this->title}</title>"
				. '<meta http-equiv="X-UA-Compatible" content="IE=edge">'
				. '<meta name="viewport" content="width=device-width, initial-scale=1">';
		
		if( $this->keywords ) {
			$output .= "<meta name='keywords' content='{$this->keywords}' />";
		}

		if( $this->desc ) {
			$output .= "<meta name='description' content='{$this->desc}' />";
		}
		
		if( $this->robots ) {
			$output .=  "<meta name='robots' content='{$this->robots}' />";
		}
		
		if( $this->og_title) {
			$output .= "<meta property='og:title' content='{$this->og_title}' />";
		}
		
		if( $this->og_type) {
			$output .= "<meta property='og:type' content='{$this->og_type}' />";
		} 
		
		if( $this->og_img) {
			$output .= "<meta property='og:image' content='{$this->og_img}' />";
		}
		
		if( $this->og_url) {
			$output .= "<meta property='og:url' content='{$this->og_url}' />";
		}
		
		return $output;
	}
	
	/********************************************************************************************
	 * 소멸자
	 *******************************************************************************************/
	function __destruct() {
		
	}
}	

◎ 각 컨트롤러
       /**************************************************
       * 현재 페이지의 SEO관련 세팅을 실행한다. (required)
     	**************************************************/
     	$meta = array(
     		"title" => "메인페이지"
		);
		$this->seo->set_meta($meta);
◎ 뷰
<!DOCTYPE html>
<html lang="ko">
<head><?php echo $this->seo->output();?></head>
태그 SEO
 다음글 CI 3.0.3 base_url(), site_url(... (2)
 이전글 ie에서 발생하는 SESSION 오류 (3)

댓글

한대승(불의회상) / 2015/11/06 13:18:38 / 추천 0
아이디어 좋은데요 ^^
소중한 자료 잘 사용 하겠습니다.
변종원(웅파) / 2015/11/06 18:01:14 / 추천 0
포럼소스에서는 뷰에만 해당 메타태그가 삽입되도록 작업 되어 있는데 hook으로 전역적으로 제어하는 것도 좋네요. ^^
스카이 / 2015/11/30 23:23:02 / 추천 0
저도 SEO 작업에 관심이 많습니다.

참고하겠습니다.