그누보드 사이트맵: 동적 생성 가이드

그누보드 사이트맵: 동적 생성 가이드

그누보드 사이트맵 구축, 더 이상 어렵지 않습니다! 그누보드를 블로그나 커뮤니티로 활용하며 겪는 사이트맵 및 구글 인덱싱 문제를 해결하고, 효율적인 동적 사이트맵 생성 방법을 통해 검색 엔진 최적화(SEO)를 극대화하는 방법을 제시합니다.


그누보드를 사용하시는 많은 분들이 사이트맵 생성과 관련된 고민을 가지고 계십니다. 특히 그누보드를 블로그 형태로 운영하는 경우, 구글 인덱싱에 불필요한 링크들이 많아 어려움을 겪는 경우가 있습니다. 하지만 robots.txt 파일을 적절히 조정하고 동적인 사이트맵을 구축하면 이러한 문제를 충분히 해결할 수 있습니다.


물론 그누보드 블로그 운영에는 장단점이 명확하게 존재합니다. 이러한 특성을 이해하고 사이트맵 최적화를 통해 단점을 보완하는 것이 중요합니다.


목차

1. 그누보드 블로그 운영의 장단점

2. 그누보드 사이트맵 동적 생성 방법

3. 구글 사이트맵 크기 제한 및 대처 방안

4. 핵심 요약: 그누보드 사이트맵 동적 생성으로 SEO 최적화

5. 자주 묻는 질문

그누보드 블로그 운영의 장단점

그누보드 블로그의 장단점이 적힌 저울을 들고 있는 한국인 여성
그누보드 블로그 운영의 장단점 분석

그누보드 블로그의 주요 특징

구분 내용
장점 1: 뛰어난 속도 다른 블로그 플랫폼에 비해 웹 페이지 로딩 속도가 빠릅니다.
장점 2: 대량 글 처리 효율 워드프레스와 달리 많은 글이 있어도 카테고리별 데이터베이스를 분할하여 처리하기 때문에 속도 저하가 적습니다.
장점 3: 블로그와 커뮤니티의 조화 블로그와 커뮤니티 기능을 결합한 형태로 사이트를 구축하기에 용이합니다.
단점 1: 구글 인덱싱 비효율 잡다한 링크들이 많아 구글 인덱싱에서 페이지 생성이 안 되는 경우가 발생할 수 있습니다.
단점 2: 프로그래밍 지식 요구 사이트 운영 및 애드센스 연동 등에서 어느 정도의 프로그래밍 지식이 필요합니다.


그누보드 사이트맵 동적 생성 방법

동적 사이트맵의 흐름을 설명하는 한국인 남성
그누보드 사이트맵 동적 생성 가이드

그누보드에서 사이트맵을 동적으로 생성하여 구글 인덱싱 효율을 높이는 방법을 소개합니다. 아래 절차에 따라 sitemap.php 파일을 생성하고 .htaccess 파일을 수정하여 사이트맵을 관리할 수 있습니다.


1단계: sitemap.php 파일 생성


먼저 그누보드 `bbs` 디렉토리 안에 `sitemap.php` 파일을 생성합니다. 이 파일은 XML 형식의 사이트맵을 동적으로 생성하는 역할을 합니다.


bbs/sitemap.php 파일 내용

<?php
include_once('./_common.php');

header('Content-type: text/xml');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');

// 시간대 설정
date_default_timezone_set("America/Los_Angeles");

// 게시판 리스트 - 비회원 읽기 가능 게시판
$sql = " SELECT * FROM {$g5['board_table']} WHERE bo_list_level = 1 AND bo_read_level = 1";
$query = sql_query($sql);

$board = array();
while ($row = sql_fetch_array($query)) {
	$board[] = $row;
}

echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 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">'."\n";

// 메인 페이지
echo "<url>"."\n";
echo "  <loc>".G5_URL."</loc>"."\n";
echo "  <lastmod>".date('c',time())."</lastmod>"."\n";
echo "  <priority>1.0</priority>"."\n";
echo "</url>"."\n";

// 비회원 읽기 가능 게시판
foreach ($board as $key => $val) :

	// 마지막 게시물 시간
	$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC LIMIT 0, 1";
	$query = sql_fetch($sql);
	
	// 마지막 게시물 생성 시간이 없으면 현재 시간으로 설정
	$wr_datetime = (empty($query['wr_datetime'])) ? date('c',time()) : date('c', strtotime($query['wr_datetime']));
	
	// 게시판 링크 작성
	echo "<url>"."\n";
	echo "  <loc>".G5_BBS_URL."/board.php?bo_table={$val['bo_table']}"."</loc>"."\n";
	echo "  <lastmod>{$wr_datetime}</lastmod>"."\n";
	echo "  <changefreq>daily</changefreq>"."\n";
	echo "  <priority>0.9</priority>"."\n";
	echo "</url>"."\n";

endforeach;

// 게시판 글 생성
foreach ($board as $key => $val) :

	// 게시판 게시물 작성
	$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC";
	$query = sql_query($sql);
	
	unset($row);
	while ($row = sql_fetch_array($query)) {
		
		$seo_title = $row['wr_seo_title'];
		if (isset($row['wr_seo_title']) && $row['wr_seo_title'] <> '') {
			$url = G5_URL.'/'.urlencode($val['bo_table']).'/'.urlencode($row['wr_seo_title']).'/';
		} else {
			$url = G5_BBS_URL."/board.php?bo_table={$val['bo_table']}&wr_id={$row['wr_id']}";
		}

		$wr_datetime = (empty($row['wr_datetime'])) ? date('c',time()) : date('c', strtotime($row['wr_datetime']));
		
		echo "<url>"."\n";
		echo "  <loc>".$url."</loc>"."\n";
		echo "  <lastmod>{$wr_datetime}</lastmod>"."\n";
		echo "  <priority>0.9</priority>"."\n";
		echo "</url>"."\n";
	}

endforeach;

echo "</urlset>"."\n";
?>


알아두세요!
위 코드는 비회원이 읽기 가능한 게시판의 게시물들을 사이트맵에 포함시킵니다. `wr_seo_title` 필드를 활용하여 SEO 친화적인 URL을 생성하고, 없다면 기본 게시물 URL을 사용합니다.


2단계: .htaccess 파일 수정


생성된 `sitemap.php` 파일을 웹에서 `sitemap.xml`로 접근할 수 있도록 `.htaccess` 파일을 수정합니다. 이는 SEO를 위한 URL 재작성에 해당합니다.


.htaccess 파일 수정 내용

RewriteBase /
RewriteRule ^sitemap.xml$ bbs/sitemap.php [L]


`RewriteBase /` 다음에 위 `RewriteRule`을 추가하면 `https://도메인주소/sitemap.xml`로 접속 시 `https://도메인주소/bbs/sitemap.php`가 실행됩니다.


구글 사이트맵 크기 제한 및 대처 방안

50,000개 링크 제한을 극복하기 위해 작은 상자들을 쌓는 한국인 여성
구글 사이트맵 크기 제한 대처 방법

주의하세요!
구글은 사이트맵 파일 하나당 최대 50,000개의 URL 또는 50MB의 크기 제한을 두고 있습니다. 이 제한을 초과하면 사이트맵 처리에 오류가 발생할 수 있습니다.


사이트에 포함된 링크가 50,000개를 넘어설 경우, 사이트맵 인덱스 파일을 사용하여 여러 개의 사이트맵 파일을 관리해야 합니다.


사이트맵 인덱스 파일 예시

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap1.xml</loc>
    <lastmod>2025-07-20</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap2.xml</loc>
    <lastmod>2025-07-20</lastmod>
  </sitemap>
  <!-- 계속 추가 -->
</sitemapindex>


이러한 구조를 활용하여 그누보드에서는 게시판별 사이트맵을 생성하는 방식으로 50,000개 링크 제한을 효율적으로 관리할 수 있습니다. 각 게시판마다 별도의 사이트맵을 만들고, 이들을 하나의 사이트맵 인덱스 파일로 묶는 방식입니다.


게시판별 동적 사이트맵 코드


아래는 `table` 파라미터를 이용하여 메인 페이지 및 각 게시판의 글 목록을 개별 사이트맵으로 생성하는 `sitemap.php` 코드입니다. 이 코드를 통해 동적 사이트맵 관리가 가능해집니다.


게시판별 sitemap.php 코드

<?php
include_once('./_common.php');

header('Content-type: text/xml');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');

// 시간대 설정
date_default_timezone_set("America/Los_Angeles");

if (!isset($_GET['table']) || empty($_GET['table'])) {
	// 게시판 리스트 - 비회원 읽기 가능 게시판
	$sql = " SELECT * FROM {$g5['board_table']} WHERE bo_list_level = 1 AND bo_read_level = 1";
	$query = sql_query($sql);

	$board = array();
	while ($row = sql_fetch_array($query)) {
		$board[] = $row;
	}

	echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
	echo '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";

	// 홈 그리고 게시판 사이트 맵
	echo "<sitemap>"."\n";
	echo "	<loc>" . G5_URL . "/main.xml</loc>"."\n";
	echo "  <lastmod>" . date('c',time()) . "</lastmod>"."\n";
	echo "</sitemap>"."\n";

	// 비회원 읽기 가능 게시판
	foreach ($board as $key => $val) :

		// 마지막 게시물 시간
		$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC LIMIT 0, 1";
		$query = sql_fetch($sql);
		
		// 마지막 게시물 생성 시간이 없으면 현재 시간으로 설정
		$wr_datetime = (empty($query['wr_datetime'])) ? date('c',time()) : date('c', strtotime($query['wr_datetime']));
		
		// 게시판 링크 작성
		echo "<sitemap>"."\n";
		echo "  <loc>".G5_URL."/{$val['bo_table']}.xml"."</loc>"."\n";
		echo "  <lastmod>{$wr_datetime}</lastmod>"."\n";
		echo "</sitemap>"."\n";

	endforeach;
	
	echo "</sitemapindex>"."\n";
	
} else {
	$table = $_GET['table'];
	
	echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
	echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 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">'."\n";


	if ($table == 'main') {

		// 게시판 리스트 - 비회원 읽기 가능 게시판
		$sql = " SELECT * FROM {$g5['board_table']} WHERE bo_list_level = 1 AND bo_read_level = 1";
		$query = sql_query($sql);

		$board = array();
		while ($row = sql_fetch_array($query)) {
			$board[] = $row;
		}
	
		// 메인 페이지
		echo "<url>"."\n";
		echo "  <loc>".G5_URL."</loc>"."\n";
		echo "  <lastmod>".date('c',time())."</lastmod>"."\n";
		echo "  <priority>1.0</priority>"."\n";
		echo "</url>"."\n";

		// 비회원 읽기 가능 게시판
		foreach ($board as $key => $val) :

			// 마지막 게시물 시간
			$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC LIMIT 0, 1";
			$query = sql_fetch($sql);
			
			// 마지막 게시물 생성 시간이 없으면 현재 시간으로 설정
			$wr_datetime = (empty($query['wr_datetime'])) ? date('c',time()) : date('c', strtotime($query['wr_datetime']));
			
			// 게시판 링크 작성
			echo "<url>"."\n";
			echo "  <loc>".G5_BBS_URL."/board.php?bo_table={$val['bo_table']}"."</loc>"."\n";
			echo "  <lastmod>{$wr_datetime}</lastmod>"."\n";
			echo "  <changefreq>daily</changefreq>"."\n";
			echo "  <priority>0.9</priority>"."\n";
			echo "</url>"."\n";

		endforeach;

	} else {
		// 게시판 리스트 - 비회원 읽기 가능 게시판
		$sql = " SELECT * FROM {$g5['board_table']} WHERE bo_table = '" . $table . "' AND bo_read_level = 1";
		$query = sql_query($sql);

		$board = array();
		while ($row = sql_fetch_array($query)) {
			$board[] = $row;
		}

		// 게시판 글 생성
		foreach ($board as $key => $val) :

			// 게시판 게시물 작성
			$sql = " SELECT * FROM {$g5['write_prefix']}{$val['bo_table']} WHERE wr_id = wr_parent AND wr_is_comment = 0 ORDER BY wr_datetime DESC";
			$query = sql_query($sql);
			
			unset($row);
			while ($row = sql_fetch_array($query)) {
				
				$seo_title = $row['wr_seo_title'];
				if (isset($row['wr_seo_title']) && $row['wr_seo_title'] <> '') {
					$url = G5_URL . '/' . urlencode($val['bo_table']) . '/' .  urlencode($row['wr_seo_title']) . '/';
				} else {
					$url = G5_BBS_URL . "/board.php?bo_table={$val['bo_table']}&wr_id={$row['wr_id']}";
				}

				$wr_datetime = (empty($row['wr_datetime'])) ? date('c',time()) : date('c', strtotime($row['wr_datetime']));
				
				echo "<url>"."\n";
				echo "  <loc>".$url."</loc>"."\n";
				echo "  <lastmod>{$wr_datetime}</lastmod>"."\n";
				echo "  <priority>0.9</priority>"."\n";
				echo "</url>"."\n";
			}

		endforeach;
	}
	
	echo "</urlset>"."\n";
}
?>


게시판별 .htaccess 설정


마지막으로, 게시판별 동적 사이트맵을 위한 `.htaccess` 파일을 수정해야 합니다. 이 설정은 `sitemap.xml`, `main.xml`, 그리고 각 게시판의 테이블 이름을 활용한 `.xml` 파일로 접근했을 때 `sitemap.php`가 적절한 파라미터를 받아 실행되도록 합니다.


주의하세요!
아래 코드는 예시이며, 실제 게시판 테이블 이름에 맞게 직접 수정해야 합니다.


게시판별 .htaccess 수정 내용

RewriteBase /
RewriteRule ^sitemap.xml$ bbs/sitemap.php [L]
RewriteRule ^main.xml$ bbs/sitemap.php?table=main [L]
RewriteRule ^게시판 테이블 1.xml$ bbs/sitemap.php?table=게시판 테이블 1 [L]
RewriteRule ^게시판 테이블 2.xml$ bbs/sitemap.php?table=게시판 테이블 2 [L]
RewriteRule ^게시판 테이블 3.xml$ bbs/sitemap.php?table=게시판 테이블 3 [L]
# 필요한 게시판 테이블에 따라 계속 추가


이와 같이 동적 사이트맵을 구축하면, 구글 서치 콘솔에 개별 사이트맵 또는 사이트맵 인덱스 파일을 제출하여 웹사이트의 모든 중요 페이지가 검색 엔진에 효과적으로 인덱싱되도록 할 수 있습니다.



핵심 요약: 그누보드 사이트맵 동적 생성으로 SEO 최적화

그누보드 블로그의 효과적인 구글 인덱싱을 위해 동적 사이트맵을 구축하는 방법을 알아보았습니다.

  1. 그누보드 블로그의 장단점 이해: 빠른 속도와 대량 글 처리 효율은 장점이지만, 구글 인덱싱 비효율성과 프로그래밍 지식 요구는 단점입니다.
  2. sitemap.php 파일 생성: 게시물 및 게시판 링크를 동적으로 포함하는 PHP 파일을 생성하여 XML 형식의 사이트맵을 만듭니다.
  3. .htaccess 파일 수정: `sitemap.xml` URL로 해당 PHP 파일이 실행되도록 URL 재작성 규칙을 추가합니다.
  4. 대량 링크 처리 (50,000개 이상): 구글 사이트맵 크기 제한을 준수하기 위해 사이트맵 인덱스 파일을 활용, 게시판별로 개별 사이트맵을 생성하여 관리합니다.
  5. 게시판별 동적 사이트맵 구축: `table` 파라미터를 활용한 `sitemap.php` 코드와 `.htaccess` 설정을 통해 각 게시판의 글들을 개별 사이트맵으로 구성할 수 있습니다.



자주 묻는 질문

Q: 그누보드를 블로그로 사용할 때 가장 큰 장점은 무엇인가요?
A: 그누보드는 다른 블로그 플랫폼에 비해 웹 페이지 로딩 속도가 빠르며, 많은 게시글이 있을 때도 카테고리별 데이터베이스를 분리하여 처리하기 때문에 속도 저하가 적다는 장점이 있습니다.
Q: 구글 사이트맵의 50,000개 링크 제한은 어떻게 해결하나요?
A: 50,000개 이상의 링크가 있을 경우, 사이트맵 인덱스 파일을 사용하여 여러 개의 개별 사이트맵 파일로 나누어 관리해야 합니다. 그누보드에서는 게시판별로 사이트맵을 생성하는 방식으로 효율적인 관리가 가능합니다.
Q: .htaccess 파일 수정 시 주의할 점은 무엇인가요?
A: .htaccess 파일은 서버 설정에 직접적인 영향을 미치므로, 잘못 수정할 경우 웹사이트에 오류가 발생할 수 있습니다. 반드시 백업 후 수정하고, 각 게시판 테이블 이름에 맞게 정확히 설정해야 합니다.
Q: 사이트맵을 제출한 후 구글 인덱싱에 바로 반영되나요?
A: 사이트맵 제출 후 구글 검색 엔진이 웹사이트를 크롤링하고 인덱싱하는 데는 시간이 소요될 수 있습니다. 일반적으로 며칠에서 몇 주까지 걸릴 수 있으며, 웹사이트의 규모와 업데이트 빈도에 따라 달라집니다.


그누보드를 블로그 또는 커뮤니티로 운영하면서 마주하는 사이트맵 관련 고민은 이제 동적 생성 방법을 통해 효과적으로 해결할 수 있습니다. 본 가이드에서 제시된 방법들을 활용하여 웹사이트의 검색 엔진 가시성을 높이고, 더 많은 사용자에게 도달할 수 있기를 바랍니다.

관련글

태그: 그누보드, 사이트맵, SEO, 블로그, 워드프레스, 구글 인덱싱, .htaccess, sitemap.php, G5_URL, G5_BBS_URL, 동적 사이트맵