[SEO] robots.txt와 sitemap.xml

 

사이트를 구축하면 다양한 로봇이 사이트의 정보를 가져 간다. 대표적인 로봇은 구글 검색 엔진이나 네이버 검색 엔진에서 사용하는 로봇 이다. robots.txt를 사용하면 검색엔진에서 가져가는 정보를 조정할 수 있다. 다만, 아직은 표준이 아니라 권고 사항이라 100% 적용이 되지는 않는다.

 

 

robots.txt

웹사이트의 최상위 폴더(/, 다큐먼트 루트 폴더)에 단 하나만 존재해야 하는 파일로 다음과 같은 양식을 가진다.

  • # : 주석
  • 하나의 코드 블럭은 빈줄로 구분 한다.
    • User-agent : ~                                     #— 제어할 로봇의 User-agent 이다.
    • Allow: ~                                                #— 접근을 허용할 폴더 또는 파일
    • Disallow: ~                                           #— 접근을 허용하지 않는 폴더 또는 파일
  • Sitemap : http://~/sitemap.xml                #— 사이트맵 xml 파일
항목 상세 설명
User-agent 대표적인 User-agent 예

  • Google : Googlebot
  • Google image : Googlebot-image
  • Msn : MSNBot
  • Naver : NaverBot
  • Daum : Daumoa
Allow, Disallow 폴더는 /로 끝난다.

정규표현식을 사용하여 지정할 수 있다.

 

참고로 각 html 파일에서 meta tag를 사용하여 지정할 수도 있다.

<meta name=”ROBOTS” content=”index,noindex,follow,nofollow,all,none” />

content의 디폴트 값은 “index,follow” 이다.

  • index : 인덱싱함
  • noindex : 인덱싱 하지 않음
  • follow : 페이지에 포함된 링크를 따라가면서 인덱싱하는 것을 허용
  • nofollow : 페이지에 포함된 링크를 따라가면서 인덱싱하는 것을 허용하지 않음
  • all : 모두 허용
  • none : 모두 거부

 

 

sitemap.xml

 

sitemap.xml을 사용하면 각 URL에 대한 추가적인 정보를 로봇에게 제공 한다. 작성한 sitemap.xml은 robots.txt에 등록하여야 한다. 아래는 sitemap의 샘플 이다.

<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd”
xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″>
<url>
<loc>https://www.obcon.biz/</loc>
<lastmod>2017-05-11</lastmod>
<changefreq>always</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.obcon.biz/whoAreYou/</loc>
</url>
</urlset>
  •  loc : URL
  • lastmod : 최종 수정일
    • 2018-12-23
    • 2018-12-23T18:00:15+09:00
  • changefreq : 수정 빈도
    • always, daily, monthly, weekly, yearly, never
  • priority : 우선 순위 (0.00 ~ 1.00)

 

사이트맵을 개인적으로 만들기에는 어려움이 있어 아래 도구를 사용하면 편리하다.

  • http://www.web-site-map.com/xml_sitemap.php : 사이트맵 자동 생성
  • WordPress Plugin : Google XML Sitemaps

 

오비컨

2018.03.08 ~ 2018.03.08, ver 0.01

 

[WordPress] WP Mail SMTP Plugin의 TLS 오류 처리

 

WordPress를 사용할 때 WP Mail SMTP 플러그인을 사용 합니다.

메일 서버에서 TLS 방식의 접속을 허용하는데 공인 CA가 없어서 오류가 발생 합니다. 이런 경우 아래와 같이 설정할 수 있습니다.

 

보안 설정

 

WP Mail SMTP 설정 화면에서 비밀번호를 등록하면 Plain Text로 저장이 되기 때문에 보안상 위험 합니다. 아래와 같이 설정 파일에 설정하여 사용하세요.

vi  wp-config.php

define( ‘WPMS_ON’, true );
define( ‘WPMS_SMTP_PASS’, ‘SMTP_비밀번호’ );

 

오류 조치

 

오류 메시지

CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 220 ready for tls
SMTP Error: Could not connect to SMTP host.
CLIENT -> SERVER: QUIT
SERVER -> CLIENT:  TLS connection failed: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca (#4.3.0)
SMTP ERROR: QUIT command failed: 454 TLS connection failed: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca (#4.3.0)
Connection: closed

 

조치 내역

Chield Theme를 사용하고 있으므로 functions.php 파일에 필터를 추가 합니다.

vi  wp-content/themes/챠일드_테마_폴더/functions.php

add_filter(‘wp_mail_smtp_custom_options’, function( $phpmailer ) {
$phpmailer->SMTPOptions = array(
‘ssl’ => array(
‘verify_peer’ => false,                                           #—false. peer 확인 않음
‘verify_peer_name’ => false,                              #— false, peer 이름 확인 않음
‘allow_self_signed’ => true                                #— true. 사설 인증 허용
)
);

return $phpmailer;
} );

 

 

WordPress의 관련 파일

 

  • wp-includes/class-smtp.php
  • wp-includes/class-phpmailer.php
    • WP Mail Plugin을 사용하지 않는 경우, $SMTPOptions 값을 직접 수정할 수도 있습니다.
  • wp-mail.php

 

 

 

오비컨

2018.03.07 ~ 2018.03.07, ver 0.01

[홈페이지] Opcache 적용

 

홈페이지를 WordPress를 사용하여 구성 하였습니다. 항상 성능이 신경이 쓰이는데 WP Total Cache 0.9.6을 사용하고 있습니다.

OPCache는 PHP 5.5 이후 버전부터 기본적으로 탑재되어 있는데 컴파일된 PHP 바이너리를 메모리에서 캐싱해 성능을 향상 시킵니다. 홈페이지에 OPCache를 적용하는 방법 입니다.

 

서비스 환경

  • Nginx 1.12.1
  • PHP 7.1.13
  • CentOS 6

 

OPCache 적용 방법

#— OPCache 설치

yum  install  php71-opcache

#— OPCache 설정

vi  /etc/php-7.1.d/10-opcache.ini

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256                #— Cache Memory
opcache.interned_strings_buffer=16                #— 문자열 버퍼 크기 (MB)
opcache.max_accelerated_files=12000            #— 파일 키 갯수
opcache.max_wasted_percentage=10               #— 만료된 캐시 저장 공간 비율
opcache.validate_timestamps=1                         #— 1. 파일/캐시 변경 체크
opcache.revalidate_freq=60                                #— 변경 체크 시간 간격 (초)
opcache.blacklist_filename=/etc/php-7.0.d/opcache*.blacklist
opcache.huge_code_pages=1

 

OPCache를 적용하면 속도가 빨라 집니다.
 

오비컨

2018.02.22 ~ 2018.02.22, ver 0.01

 

 

[홈페이지] Enfold Theme 한글화 방법

 

여러 사이트를 구성하기 위해서 WordPress를 사용하고 있습니다. 최근에 만든 사이트는 Enfold Theme를 사용하고 있는데 한글이 표시되지 않아 불편한 점이 있습니다. 그래서 한글을 적용하니 편리 합니다.

 

한글을 적용한 Enfold Theme

 

서비스 운영 환경

홈페이지 구성을 위해서 아래와 같은 환경을 사용하고 있습니다.

  • OS : CentOS
  • DOCUMENT_ROOT : /usr/share/nginx/html
  • WordPress 설치 폴더 : /usr/share/nginx/html/wordpress
  • Enfold Theme
    • /usr/share/nginx/html/wordpress/wp-content/themes/enfold
    • Version : 4.2.3
  • Enfold Chield Theme 사용
    • /usr/share/nginx/html/wordpress/wp-content/themes/enfold_child

 

Enfold Theme 한글화  방법

cd /usr/share/nginx/html/wordpress/wp-content

#— Enfold Theme POT 파일로 Enfold Theme용 한글 파일 생성
cp  themes/enfold/lang/enfold.pot  languages/themes/avia_framework-ko_KR.po

#— Enfold Theme에 포함된 LayerSlider Plugin용 한글 파일 생성
cp themes/enfold/config-layerslider/LayerSlider/locales/LayerSlider-en_US.pot
languages/plugins/LayerSlider-ko_KR.po

vi  themes/enfold_child/functions.php                                  #— 아래 내용을 추가 합니다.
//— Enfold Theme에 있는 LayerSlider Plugin의 한글 파일을 사용하도록 설정
function enfoldLayerSlider() {
if (!current_theme_supports(‘deactivate_layerslider’)) {
load_plugin_textdomain(‘LayerSlider’);
}
}
add_action(‘wp’, ‘enfoldLayerSlider’, 11);

 

위 작업을 마치면 po 파일은 생성이 되지만 실제로 작업하는 mo 파일이 존재하지 않습니다. po 파일에서 번역한 후 mo 파일을 생성하려면 아래와 같이 작업 하세요.

#— PO 파일을 MO 파일로 컴파일하기 위해서 gettext를 설치 합니다. 한번만 설치하면 됩니다.
yum  install  gettext 

#— Enfold Theme를 번역한 후 mo 파일을 생성 합니다.
cd  /usr/share/nginx/html/wordpress/wp-content/languages/themes
vi  avia_framework-ko_KR.po                                                         #— 편집기에서 번역 작업을 진행하세요.
msgfmt  avia_framework-ko_KR.po  -o  avia_framework-ko_KR.mo

 

#— LayerSlider Plugin을 번역한 후 mo 파일을 생성 합니다.
cd  /usr/share/nginx/html/wordpress/wp-content/languages/plugins
vi  LayerSlider-ko_KR.po                                                                  #— 편집기에서 번역 작업을 진행하세요.
msgfmt  LayerSlider-ko_KR.po  -o  LayerSlider-ko_KR.mo

 

참고 문헌

 

 

 

오비컨

2018.02.21 ~ 2018.02.21, ver 0.01

 

 

Markdown 문법

 

Markdown은 복잡한 HTML을 작성하지 않고 Text 만으로 웹페이지를 쉽게 작성할 수 있도록 지원 합니다. WordPresss 등에서 마크다운을 사용하면 편리하게 문서를 작성할 수 있습니다. 아래는 많이 사용하는 Markdown 문법 입니다.

 

Markdown 문법

 

분류 문법 표시 형태
제목 # 제목 1

제목 1

## 제목 2

제목 2

### 제목 3

제목 3

본문 본문                        #—  맨뒤에 공백 2칸은 줄 바꿈
다음 문장
본문
다음 문장
> 인용 1단계 생략
>> 인용 2 단계 생략
 [오비컨](http://www.obcon.biz/ “오비컨으로 링크”) 오비컨
![오비컨](http://www.obcon.biz/wordpress/wp-content/uploads/2017/10/OBCon_logo_투명.png)
**강조** 강조
__이탈릭__ 이탈릭
~~취소~~ 취소
목록 * 목록 1
* 목록 1-1        #— 맨앞에 공백 2칸
*  목록 1-2
* 목록 2
  • 목록 1
    • 목록 1-1
    • 목록 1-2
  • 목록 2
1 목록 1
1 목록 1-1       #— 맨앞에 공백 2칸
2 목록 1-2
2 목록 2
  1. 목록 1
    1. 목록 1-1
    2. 목록 1-2
  2. 목록 2
 코드 블럭 ‘코드` 생략
“`
코드 블럭
“`
생략
수평선
 테이블 제목 1 | 제목 2 | 제목 3
— | — | —
내용 1-1 | 내용 1-2 | 내용 1-3
내용 2-1 | 내용 2-2 | 내용 2-3
제목 1 제목 2 제목 3
내용 1-1 내용 1-2 내용 1-3
내용 2-1 내용 2-2 내용 2-3

 

 

오비컨

2018.02.06 ~ 2018.02.06, ver 0.01

 

 

WordPress KBoard content 편집

 

WordPress와 KBoard 게시판을 사용하여 오비컨 홈페이지를 작성 하였습니다. KBoard를 사용하고 있는데 게시물이 표시될 때 아무곳에나 <br /> 테그가 붙어 보기가 좋지 않습니다. 모든 것을 한번에 수정하기에는 시간이 많이 걸려 우선 간단하게 수정하여 사용해 봅시다.

KBoard context 편집

wp-content/plugins/kboard/class/KBoardBuilder.class.php 파일의 function builderDocument() 함수가 게시판의 본문 페이지를 생성 합니다. 본문 내용은 nl2br() 함수를 사용하여 New_Line 대신에 <br /> 테그를 붙이기 때문에 이후 content를 수정합니다.

$content->content = nl2br($content->getContent());

$content->content = apply_filters(‘kboard_content’, $content->getContent(), $content->uid, $this->board_id);

Child Theme의 functions.php 파일에 다음을 추가 합니다. 아래 코드를 추가하면 목록 같은 곳에서 빈라인이 추가되는 것이 사라집니다. 일부 라인이 붙는 부분은 공백 또는 엔터를 사용하여 편집 하세요.

add_filter(‘kboard_content’, ‘obcon_kboard_content’);
function obcon_kboard_content($content) {
$content = str_replace(‘><br />’, ‘>’, $content);
return $content;
}

참고 문헌

 

 

오비컨
2018.02.05 ~ 2018.02.05, ver 0.01

 

WordPress Dropin의 종류

WordPress의 Plugin의 종류중에는 dropin이라는 것이 있습니다. dropin은 플러그인이지만 WordPress의 원래 기능을 개선할 수 있는 것으로 다음과 같은 종류가 있습니다.

 

Dropin의 종류

  • Advanced caching plugin : advanced-cache.php
  • Custom database class : db.php
  • Custom database error message : db-error.php
  • Custom installation script : install.php
  • Custom maintenance message : maintenance.php
  • External object cache : object-cache.php
  • For multi-site
    • Executed before Multisite is loaded : sunrise.php
    • Custom site deleted message : blog-deleted.php
    • Custom site inactive message : blog-inactive.php
    • Custom site suspended message : blog-suspended.php

 

오비컨

2018.01.32 ~ 2018.01.31, ver 0.01

페이지 로딩 속도 측정

 

여러 사이트를 운영하다보면 웹페이지의 로딩 속도를 개선하기 위해서 여러가지 노력을 합니다. 보통은 여러가지 도구를 사용하여 각 구간별로 병목 현상을 발생시키는 부분을 찾아 개선해 가는데 도구로도 부족한 부분이 있는 경우 별도의 코드를 작성하여 시간을 측정 합니다.

저는 주로 Java를 사용하였기 때문에 속도 측정을 위해 JavaScript와 Java 코드를 작성하여 사용하고 있습니다. 이번에 SuiteCRM(영업관리, 고객관리,CRM)과 WordPress(홈페이지, 블로그)의 속도를 개선하기 위해서 PHP용 코드도 작성을 하였습니다.

성능 측정 도구

웹페이지 성능 측정을 위해 아래 도구를 사용할 수 있습니다.

 

PHP 속도 측정용 코드

아래 코드를 사용하면 구간을 세밀하게 나누어 속도를 측정할 수 있습니다. 측정 단위는 ms (1/1000초) 단위 입니다.

 

class TimeCheck {

private $timecheck;

final function TimeCheck() {
$this->timecheck = $this->getTime();
}

private function getTime() {
$now = microtime();
$now = explode(‘ ‘, $now);
$now = $now[1] + $now[0];
return $now;
}

public function setTime() {
$timecheck = $this->getTime();
}

public function getDuration() {
return 1000.0 * ($this->getTime() – $this->timecheck);
}

public function getDurationString() {
return strval($this->getDuration());
}
}

 

//— 측정 시작 시간 저장

$objTimeCheck = new TimeCheck();

 

//— 소요 시간 출력 (화면에 숨겨서 표시), 일반적으로 로그에 표시하는 것이 좋습니다.

echo “<!– “.strval($objTimeCheck->getDuration()).” –>”;

 

 

시험삼아 워드프레스의 Plugin을 활성화/비활성화를 한 경우 홈페이지 로딩 속도를 측정해 보았습니다.
각자 운영중인 환경이 다르므로 저와는 다른 결과가 나오겠지만 참고로 보십시오. 저는 Enfold Theme를 사용하고 있는데 페이지 로딩 속도가 0.7초라고 하면 조금 느려지더라도 체감상 큰 차이는 없습니다.

  • Wordfence Security : 보안 플러그인
    • 활성화를 하면 약 15% 속도가 느려 집니다.
  • Yoast SEO : 검색엔진최적화 (Search Engine Optimize) 플러그인
    • 활성화를 하면 약25% 속도가 느려 집니다.

 

오비컨
2018.01.31 ~ 2018.01.31, ver 0.01

 

WordPress 속도 향상

 

WordPress를 사용하고 있는데 속도가 느려 속도를 개선 합니다.
웹페이지 속도 측정
Web Page Test 사이트에서 속도를 측정할 수 있습니다.
W3 Total Cache 적용
W3 Total Cache Plugin을 설치하고 설정 합니다.
  • Page Cache : Enable
    • Page Cache Method : “Disk: Enhanced”
  • Minify : Disable
  • Opcode Cach : Not Available
  • Database Cache : Disable
  • Object Cache : Disable
  • Browser Cache : Enable
  • CDN : Disable
  • Reverse Proxy : Disable
약 11초에서 약 5초로 줄었지만 아직도 느립니다.
Cache 설정 변경
  • Page Cache Method : “Opcode: Alternative PHP Cache (APC/APCu)”
  • Database Cache : Enable
    • Database Cache Method : “Opcode: Alternative PHP Cache (APC/APCu)”
5초에 약 3초로 성능이 개선 되었습니다.
관련 도구
2018.01.08 ~ 2018.01.09, ver 0.02

 

도로명 주소 Plugin 개발 계획 ver 0.02

 

WordPress로 Theme를 만들기전에 Plugin을 만들어 보려고 합니다.
가장 일반적으로 많이 사용할 수 있는 “도로명 주소”를 찾아주는 Juso Plugin을 만들 예정 입니다.
몇년전에 Cloud 홈페이지 구축시 만들어서 사용을 했었는데, 별도로 개발과 관련된 사항을 정리를 해서 올리 겠습니다.
주요 기능
  • 화면에 “우편번호 검색” 버튼을 추가 합니다.
  • 도로명 주소를 검색해서 가져 옵니다.
    • 기본 설정 항목 : 우편번호, 주소, 상세 주소
    • 추가 설정 항목 : 국가, 우편번호, 주, 시/도, 주소
      • 외국 사이트를 위해서 추가 설정 항목을 지정할 수 있도록 합니다.
  • 도로명 주소는 http://www.juso.go.kr/ 사이트에서 가져 옵니다.
도로명주소 검색 프로세스
Juso Plugin 화면에서 도로명 주소를 가져오는 단계를 정리 합니다.
1 단계 : 화면의 특정 필드 옆에 “우편번호 검색” 버튼을 추가 합니다.
2 단계 : “우편번호 검색” 버튼을 선택하면 도로명 주소를 검색할 수 있는 새창을 표시 합니다.
         새 창에서 도로명으로 주소를 검색 합니다.
         이 페이지는 도로명주소 안내시스템 사이트에서 제공 합니다.
3 단계 : 위 화면에서 도로명 주소를 선택한 후 상세 주소를 입력 합니다.
         이 페이지는 도로명주소 안내시스템 사이트에서 제공 합니다.
4 단계 : 위 화면에서 “주소입력” 버튼을 선택하여 주소를 필드에 저장 합니다.
참고 사이트
2017.12.11 ~ 2017.12.16, ver 0.02