feat(seo): 홈페이지 SEO 최적화 — 메타태그·sitemap.xml·robots.txt

## index.html (기반 메타태그)
- title: 풀네임 + 키워드 포함
- description: 160자 최적화
- keywords: 지오정보기술·GUARDiA·공공기관IT·안산IT기업 등
- og:type/title/description/url/image/locale
- twitter:card/title/description/image
- JSON-LD: Organization (주소·전화·대표자) + WebSite 스키마
- 네이버/구글 서치콘솔 인증 주석 준비

## public/sitemap.xml (26개 URL)
- priority: 홈 1.0, GUARDiA 0.9, 오시는길·문의 0.8
- changefreq: 뉴스/공지 weekly, 솔루션 monthly, 약관 yearly

## public/robots.txt
- Googlebot/Yeti(네이버) Allow, Baiduspider Disallow
- /admin/ /api/ Disallow
- Sitemap 경로 명시

## hooks/useSeoMeta.js
- 페이지별 title/description/og/twitter/canonical 동적 업데이트

## 적용 페이지 (6개)
- Home: AI 인프라 자율 운영 키워드
- GuardiaDetail: GUARDiA ITSM 상세 설명
- Company>Greeting: CEO 인사말·홍영택
- Company>Location: 안산 주소·전화번호
- Privacy/Terms/Sitemap: 각 페이지 설명

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DESKTOP-TKLFCPR\ython 2026-05-31 12:39:46 +09:00
parent f24a5818dd
commit 97f532e64f
10 changed files with 354 additions and 6 deletions

View File

@ -3,13 +3,87 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="(주)지오정보기술 — AI 기반 레거시 인프라 자율 운영 플랫폼 GUARDiA ITSM 및 ERP·CRM·BI 솔루션">
<meta name="keywords" content="지오정보기술, GUARDiA, ITSM, 인프라자동화, 공공기관, ERP, ChatOps"> <!-- 기본 SEO -->
<meta property="og:title" content="(주)지오정보기술"> <title>(주)지오정보기술 — AI 기반 인프라 자율 운영 플랫폼 GUARDiA ITSM</title>
<meta property="og:description" content="AI 기반 레거시 인프라 자율 운영 플랫폼 GUARDiA ITSM"> <meta name="description" content="(주)지오정보기술은 AI 기반 레거시 인프라 자율 운영 플랫폼 GUARDiA ITSM을 개발합니다. 1,000개 이상 공공기관 IT 인프라를 메신저 한 줄 명령으로 자동 운영하세요.">
<meta name="keywords" content="지오정보기술, GUARDiA, ITSM, AI인프라자동화, 공공기관IT, 레거시인프라, ChatOps, 에이전트리스배포, ERP, CRM, SI, 안산IT기업">
<meta name="author" content="(주)지오정보기술">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://zioinfo.co.kr/">
<!-- Open Graph (카카오·페이스북·네이버) -->
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<title>(주)지오정보기술</title> <meta property="og:site_name" content="(주)지오정보기술">
<link rel="icon" type="image/png" href="/favicon.ico"> <meta property="og:title" content="(주)지오정보기술 — GUARDiA ITSM AI 인프라 자동화">
<meta property="og:description" content="메신저 한 줄 명령으로 공공기관 레거시 서버를 자동 운영. GUARDiA ITSM으로 IT 운영 혁신을 경험하세요.">
<meta property="og:url" content="https://zioinfo.co.kr/">
<meta property="og:image" content="https://zioinfo.co.kr/logo.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:locale" content="ko_KR">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="(주)지오정보기술 — GUARDiA ITSM">
<meta name="twitter:description" content="AI 기반 레거시 인프라 자율 운영 플랫폼. 공공기관 IT 운영 자동화의 새로운 기준.">
<meta name="twitter:image" content="https://zioinfo.co.kr/logo.png">
<!-- 네이버 서치어드바이저 인증 (등록 후 content 값 교체) -->
<!-- <meta name="naver-site-verification" content="YOUR_NAVER_CODE"> -->
<!-- 구글 서치콘솔 인증 (등록 후 content 값 교체) -->
<!-- <meta name="google-site-verification" content="YOUR_GOOGLE_CODE"> -->
<!-- JSON-LD: 기업 정보 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "(주)지오정보기술",
"alternateName": "ZioInfo",
"url": "https://zioinfo.co.kr",
"logo": "https://zioinfo.co.kr/logo.png",
"description": "AI 기반 레거시 인프라 자율 운영 플랫폼 GUARDiA ITSM 및 ERP·CRM·BI 솔루션 전문 IT 기업",
"foundingDate": "2000",
"address": {
"@type": "PostalAddress",
"streetAddress": "광덕4로 220 오피스브이 578호",
"addressLocality": "안산시 단원구",
"addressRegion": "경기도",
"postalCode": "15440",
"addressCountry": "KR"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+82-31-483-1766",
"contactType": "customer service",
"availableLanguage": "Korean"
},
"founder": { "@type": "Person", "name": "홍영택" }
}
</script>
<!-- JSON-LD: 웹사이트 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "(주)지오정보기술",
"url": "https://zioinfo.co.kr",
"potentialAction": {
"@type": "SearchAction",
"target": "https://zioinfo.co.kr/support/faq?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/logo.png">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">

View File

@ -0,0 +1,24 @@
# robots.txt — (주)지오정보기술
# https://zioinfo.co.kr
User-agent: *
Allow: /
# 관리자 페이지 크롤링 차단
Disallow: /admin/
Disallow: /api/
# 크롤러별 개별 설정
User-agent: Googlebot
Allow: /
Crawl-delay: 1
User-agent: Yeti
Allow: /
Crawl-delay: 1
User-agent: Baiduspider
Disallow: /
# 사이트맵 위치
Sitemap: https://zioinfo.co.kr/sitemap.xml

View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<!---->
<url>
<loc>https://zioinfo.co.kr/</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<!-- 솔루션 -->
<url>
<loc>https://zioinfo.co.kr/solution/guardia</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/solution/erp</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/solution/crm</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/solution/bi</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<!-- 회사소개 -->
<url>
<loc>https://zioinfo.co.kr/company/greeting</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/company/history</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/company/organization</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/company/ci</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/company/location</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.7</priority>
</url>
<!-- 사업실적 -->
<url>
<loc>https://zioinfo.co.kr/business/reference</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/business/partner</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<!-- 고객지원 -->
<url>
<loc>https://zioinfo.co.kr/support/notice</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/support/faq</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/support/catalog</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/support/contact</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<!-- 채용 -->
<url>
<loc>https://zioinfo.co.kr/recruit/jobs</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/recruit/welfare</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/recruit/apply</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<!-- 뉴스 -->
<url>
<loc>https://zioinfo.co.kr/news/newsroom</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/news/blog</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
<!-- 정책 -->
<url>
<loc>https://zioinfo.co.kr/privacy</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.4</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/terms</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>yearly</changefreq>
<priority>0.4</priority>
</url>
<url>
<loc>https://zioinfo.co.kr/sitemap</loc>
<lastmod>2026-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.3</priority>
</url>
</urlset>

View File

@ -0,0 +1,60 @@
import { useEffect } from 'react';
const BASE = 'https://zioinfo.co.kr';
const SITE = '(주)지오정보기술';
/**
* 페이지별 SEO 메타태그 동적 업데이트.
* @param {Object} opts
* @param {string} opts.title 페이지 제목 (| 사이트명 자동 추가)
* @param {string} opts.description 페이지 설명 (160 이내 권장)
* @param {string} [opts.path] 정규 URL 경로 (: '/solution/guardia')
* @param {string} [opts.image] OG 이미지 URL
* @param {string} [opts.keywords] 추가 키워드 (콤마 구분)
*/
export function useSeoMeta({ title, description, path = '', image = '/logo.png', keywords = '' }) {
useEffect(() => {
const fullTitle = title ? `${title} | ${SITE}` : SITE;
const canonical = `${BASE}${path}`;
const ogImage = image.startsWith('http') ? image : `${BASE}${image}`;
// title
document.title = fullTitle;
// 메타 업데이트 헬퍼
const set = (selector, attr, value) => {
let el = document.querySelector(selector);
if (!el) {
el = document.createElement('meta');
const [k, v] = selector.replace('meta[', '').replace(']', '').split('=');
el.setAttribute(k, v.replace(/"/g, ''));
document.head.appendChild(el);
}
el.setAttribute(attr, value);
};
// canonical
let canonical_el = document.querySelector('link[rel="canonical"]');
if (!canonical_el) {
canonical_el = document.createElement('link');
canonical_el.rel = 'canonical';
document.head.appendChild(canonical_el);
}
canonical_el.href = canonical;
// 기본
set('meta[name="description"]', 'content', description);
if (keywords) set('meta[name="keywords"]', 'content', keywords);
// OG
set('meta[property="og:title"]', 'content', fullTitle);
set('meta[property="og:description"]', 'content', description);
set('meta[property="og:url"]', 'content', canonical);
set('meta[property="og:image"]', 'content', ogImage);
// Twitter
set('meta[name="twitter:title"]', 'content', fullTitle);
set('meta[name="twitter:description"]', 'content', description);
set('meta[name="twitter:image"]', 'content', ogImage);
}, [title, description, path, image, keywords]);
}

View File

@ -2,6 +2,7 @@ import React from 'react';
import { Routes, Route, NavLink, useNavigate } from 'react-router-dom'; import { Routes, Route, NavLink, useNavigate } from 'react-router-dom';
import './Common.css'; import './Common.css';
import './Company.css'; import './Company.css';
import { useSeoMeta } from '../hooks/useSeoMeta';
/* ── 서브 네비 ── */ /* ── 서브 네비 ── */
const SUB_NAV = [ const SUB_NAV = [
@ -37,6 +38,7 @@ function SubNav({ title }) {
/* ── CEO 인사말 ── */ /* ── CEO 인사말 ── */
function Greeting() { function Greeting() {
useSeoMeta({ title: 'CEO 인사말 — 홍영택 대표이사', description: '(주)지오정보기술 홍영택 대표이사의 인사말. 20년 이상 공공기관 IT 전문 서비스 기업으로 성장한 지오정보기술의 비전을 소개합니다.', path: '/company/greeting' });
return ( return (
<main id="main-content" className="inner-page"> <main id="main-content" className="inner-page">
<SubNav title="CEO 인사말" /> <SubNav title="CEO 인사말" />
@ -359,6 +361,7 @@ function CI() {
/* ── 오시는 길 ── */ /* ── 오시는 길 ── */
function Location() { function Location() {
useSeoMeta({ title: '오시는 길 — 경기도 안산시 단원구', description: '(주)지오정보기술 찾아오시는 방법. 경기도 안산시 단원구 광덕4로 220 오피스브이 578호. 전화: 031-483-1766', path: '/company/location', keywords: '지오정보기술 주소, 지오정보기술 위치, 안산 IT기업' });
return ( return (
<main id="main-content" className="inner-page"> <main id="main-content" className="inner-page">
<SubNav title="오시는 길" /> <SubNav title="오시는 길" />

View File

@ -1,6 +1,7 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import './GuardiaDetail.css'; import './GuardiaDetail.css';
import { useSeoMeta } from '../hooks/useSeoMeta';
const FEATURES = [ const FEATURES = [
{ icon:'🤖', title:'AI 에이전트 자동화', { icon:'🤖', title:'AI 에이전트 자동화',
@ -89,6 +90,13 @@ const TECH_STACK = [
]; ];
export default function GuardiaDetail() { export default function GuardiaDetail() {
useSeoMeta({
title: 'GUARDiA ITSM — AI 기반 레거시 인프라 자율 운영 플랫폼',
description: 'GUARDiA ITSM은 메신저 한 줄 명령으로 공공기관 레거시 서버를 자동 운영합니다. 에이전트 설치 없이 SSH/SFTP로 배포·장애·보안 운영을 완전 자동화.',
path: '/solution/guardia',
keywords: 'GUARDiA ITSM, AI ITSM, 공공기관 인프라 자동화, ChatOps, 에이전트리스, 레거시 서버 자동화',
image: '/screenshots/01_dashboard.png',
});
const [activeTab, setActiveTab] = useState('features'); const [activeTab, setActiveTab] = useState('features');
return ( return (

View File

@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
import './Home.css'; import './Home.css';
import { useSeoMeta } from '../hooks/useSeoMeta';
/* ── 히어로 슬라이드 데이터 ─────────────────────────────── */ /* ── 히어로 슬라이드 데이터 ─────────────────────────────── */
const SLIDES = [ const SLIDES = [
@ -70,6 +71,13 @@ const KPIS = [
]; ];
export default function Home() { export default function Home() {
useSeoMeta({
title: 'AI 기반 인프라 자율 운영 플랫폼 GUARDiA ITSM',
description: '(주)지오정보기술은 메신저 한 줄 명령으로 공공기관 레거시 IT 인프라를 자동 운영하는 GUARDiA ITSM을 개발합니다. 에이전트 설치 없이 SSH/SFTP로 1,000개 기관 운영 자동화.',
path: '/',
keywords: '지오정보기술, GUARDiA ITSM, 공공기관 인프라 자동화, AI 운영, ChatOps',
});
const [slide, setSlide] = useState(0); const [slide, setSlide] = useState(0);
const [paused, setPaused] = useState(false); const [paused, setPaused] = useState(false);
const [news, setNews] = useState([]); const [news, setNews] = useState([]);

View File

@ -1,8 +1,10 @@
import React from 'react'; import React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import './Common.css'; import './Common.css';
import { useSeoMeta } from '../hooks/useSeoMeta';
export default function Privacy() { export default function Privacy() {
useSeoMeta({ title: '개인정보처리방침', description: '(주)지오정보기술 개인정보처리방침. 수집 항목, 보유 기간, 이용자 권리, 개인정보 보호책임자 안내.', path: '/privacy' });
return ( return (
<main id="main-content" className="inner-page"> <main id="main-content" className="inner-page">
<section className="section"> <section className="section">

View File

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import './Common.css'; import './Common.css';
import { useSeoMeta } from '../hooks/useSeoMeta';
const MAP = [ const MAP = [
{ {
@ -74,6 +75,7 @@ const MAP = [
]; ];
export default function Sitemap() { export default function Sitemap() {
useSeoMeta({ title: '사이트맵', description: '(주)지오정보기술 홈페이지 전체 메뉴 안내. 회사소개, 솔루션, 사업실적, 고객지원, 채용, 뉴스 등 모든 페이지를 확인하세요.', path: '/sitemap' });
return ( return (
<main id="main-content" className="inner-page"> <main id="main-content" className="inner-page">
<section className="section"> <section className="section">

View File

@ -1,7 +1,9 @@
import React from 'react'; import React from 'react';
import './Common.css'; import './Common.css';
import { useSeoMeta } from '../hooks/useSeoMeta';
export default function Terms() { export default function Terms() {
useSeoMeta({ title: '이용약관', description: '(주)지오정보기술 이용약관. 서비스 이용 목적, 권리의무, 면책조항 등을 안내합니다.', path: '/terms' });
return ( return (
<main id="main-content" className="inner-page"> <main id="main-content" className="inner-page">
<section className="section"> <section className="section">