diff --git a/workspace/zioinfo-web/frontend/index.html b/workspace/zioinfo-web/frontend/index.html index fe3b9bc5..28db22e3 100644 --- a/workspace/zioinfo-web/frontend/index.html +++ b/workspace/zioinfo-web/frontend/index.html @@ -3,13 +3,87 @@ - - - - + + + (주)지오정보기술 — AI 기반 인프라 자율 운영 플랫폼 GUARDiA ITSM + + + + + + + - (주)지오정보기술 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/zioinfo-web/frontend/public/robots.txt b/workspace/zioinfo-web/frontend/public/robots.txt new file mode 100644 index 00000000..9c2c00cc --- /dev/null +++ b/workspace/zioinfo-web/frontend/public/robots.txt @@ -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 diff --git a/workspace/zioinfo-web/frontend/public/sitemap.xml b/workspace/zioinfo-web/frontend/public/sitemap.xml new file mode 100644 index 00000000..22315104 --- /dev/null +++ b/workspace/zioinfo-web/frontend/public/sitemap.xml @@ -0,0 +1,165 @@ + + + + + + https://zioinfo.co.kr/ + 2026-05-31 + weekly + 1.0 + + + + + https://zioinfo.co.kr/solution/guardia + 2026-05-31 + monthly + 0.9 + + + https://zioinfo.co.kr/solution/erp + 2026-05-31 + monthly + 0.7 + + + https://zioinfo.co.kr/solution/crm + 2026-05-31 + monthly + 0.7 + + + https://zioinfo.co.kr/solution/bi + 2026-05-31 + monthly + 0.7 + + + + + https://zioinfo.co.kr/company/greeting + 2026-05-31 + yearly + 0.8 + + + https://zioinfo.co.kr/company/history + 2026-05-31 + yearly + 0.6 + + + https://zioinfo.co.kr/company/organization + 2026-05-31 + yearly + 0.5 + + + https://zioinfo.co.kr/company/ci + 2026-05-31 + yearly + 0.5 + + + https://zioinfo.co.kr/company/location + 2026-05-31 + yearly + 0.7 + + + + + https://zioinfo.co.kr/business/reference + 2026-05-31 + monthly + 0.7 + + + https://zioinfo.co.kr/business/partner + 2026-05-31 + monthly + 0.6 + + + + + https://zioinfo.co.kr/support/notice + 2026-05-31 + weekly + 0.7 + + + https://zioinfo.co.kr/support/faq + 2026-05-31 + monthly + 0.7 + + + https://zioinfo.co.kr/support/catalog + 2026-05-31 + monthly + 0.6 + + + https://zioinfo.co.kr/support/contact + 2026-05-31 + monthly + 0.8 + + + + + https://zioinfo.co.kr/recruit/jobs + 2026-05-31 + weekly + 0.7 + + + https://zioinfo.co.kr/recruit/welfare + 2026-05-31 + yearly + 0.5 + + + https://zioinfo.co.kr/recruit/apply + 2026-05-31 + monthly + 0.6 + + + + + https://zioinfo.co.kr/news/newsroom + 2026-05-31 + weekly + 0.7 + + + https://zioinfo.co.kr/news/blog + 2026-05-31 + weekly + 0.6 + + + + + https://zioinfo.co.kr/privacy + 2026-05-31 + yearly + 0.4 + + + https://zioinfo.co.kr/terms + 2026-05-31 + yearly + 0.4 + + + https://zioinfo.co.kr/sitemap + 2026-05-31 + monthly + 0.3 + + + diff --git a/workspace/zioinfo-web/frontend/src/hooks/useSeoMeta.js b/workspace/zioinfo-web/frontend/src/hooks/useSeoMeta.js new file mode 100644 index 00000000..854a7d10 --- /dev/null +++ b/workspace/zioinfo-web/frontend/src/hooks/useSeoMeta.js @@ -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]); +} diff --git a/workspace/zioinfo-web/frontend/src/pages/Company.jsx b/workspace/zioinfo-web/frontend/src/pages/Company.jsx index b18c88e4..96a329be 100644 --- a/workspace/zioinfo-web/frontend/src/pages/Company.jsx +++ b/workspace/zioinfo-web/frontend/src/pages/Company.jsx @@ -2,6 +2,7 @@ import React from 'react'; import { Routes, Route, NavLink, useNavigate } from 'react-router-dom'; import './Common.css'; import './Company.css'; +import { useSeoMeta } from '../hooks/useSeoMeta'; /* ── 서브 네비 ── */ const SUB_NAV = [ @@ -37,6 +38,7 @@ function SubNav({ title }) { /* ── CEO 인사말 ── */ function Greeting() { + useSeoMeta({ title: 'CEO 인사말 — 홍영택 대표이사', description: '(주)지오정보기술 홍영택 대표이사의 인사말. 20년 이상 공공기관 IT 전문 서비스 기업으로 성장한 지오정보기술의 비전을 소개합니다.', path: '/company/greeting' }); return (
@@ -359,6 +361,7 @@ function CI() { /* ── 오시는 길 ── */ function Location() { + useSeoMeta({ title: '오시는 길 — 경기도 안산시 단원구', description: '(주)지오정보기술 찾아오시는 방법. 경기도 안산시 단원구 광덕4로 220 오피스브이 578호. 전화: 031-483-1766', path: '/company/location', keywords: '지오정보기술 주소, 지오정보기술 위치, 안산 IT기업' }); return (
diff --git a/workspace/zioinfo-web/frontend/src/pages/GuardiaDetail.jsx b/workspace/zioinfo-web/frontend/src/pages/GuardiaDetail.jsx index c464d271..e002eee0 100644 --- a/workspace/zioinfo-web/frontend/src/pages/GuardiaDetail.jsx +++ b/workspace/zioinfo-web/frontend/src/pages/GuardiaDetail.jsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import './GuardiaDetail.css'; +import { useSeoMeta } from '../hooks/useSeoMeta'; const FEATURES = [ { icon:'🤖', title:'AI 에이전트 자동화', @@ -89,6 +90,13 @@ const TECH_STACK = [ ]; 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'); return ( diff --git a/workspace/zioinfo-web/frontend/src/pages/Home.jsx b/workspace/zioinfo-web/frontend/src/pages/Home.jsx index 2b4eb47e..a0ab617a 100644 --- a/workspace/zioinfo-web/frontend/src/pages/Home.jsx +++ b/workspace/zioinfo-web/frontend/src/pages/Home.jsx @@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { Link } from 'react-router-dom'; import axios from 'axios'; import './Home.css'; +import { useSeoMeta } from '../hooks/useSeoMeta'; /* ── 히어로 슬라이드 데이터 ─────────────────────────────── */ const SLIDES = [ @@ -70,6 +71,13 @@ const KPIS = [ ]; 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 [paused, setPaused] = useState(false); const [news, setNews] = useState([]); diff --git a/workspace/zioinfo-web/frontend/src/pages/Privacy.jsx b/workspace/zioinfo-web/frontend/src/pages/Privacy.jsx index 7a2d1518..85639f52 100644 --- a/workspace/zioinfo-web/frontend/src/pages/Privacy.jsx +++ b/workspace/zioinfo-web/frontend/src/pages/Privacy.jsx @@ -1,8 +1,10 @@ import React from 'react'; import { Link } from 'react-router-dom'; import './Common.css'; +import { useSeoMeta } from '../hooks/useSeoMeta'; export default function Privacy() { + useSeoMeta({ title: '개인정보처리방침', description: '(주)지오정보기술 개인정보처리방침. 수집 항목, 보유 기간, 이용자 권리, 개인정보 보호책임자 안내.', path: '/privacy' }); return (
diff --git a/workspace/zioinfo-web/frontend/src/pages/Sitemap.jsx b/workspace/zioinfo-web/frontend/src/pages/Sitemap.jsx index 5023b4dc..e0b83e56 100644 --- a/workspace/zioinfo-web/frontend/src/pages/Sitemap.jsx +++ b/workspace/zioinfo-web/frontend/src/pages/Sitemap.jsx @@ -1,6 +1,7 @@ import React from 'react'; import { Link } from 'react-router-dom'; import './Common.css'; +import { useSeoMeta } from '../hooks/useSeoMeta'; const MAP = [ { @@ -74,6 +75,7 @@ const MAP = [ ]; export default function Sitemap() { + useSeoMeta({ title: '사이트맵', description: '(주)지오정보기술 홈페이지 전체 메뉴 안내. 회사소개, 솔루션, 사업실적, 고객지원, 채용, 뉴스 등 모든 페이지를 확인하세요.', path: '/sitemap' }); return (
diff --git a/workspace/zioinfo-web/frontend/src/pages/Terms.jsx b/workspace/zioinfo-web/frontend/src/pages/Terms.jsx index 41056603..57b831b3 100644 --- a/workspace/zioinfo-web/frontend/src/pages/Terms.jsx +++ b/workspace/zioinfo-web/frontend/src/pages/Terms.jsx @@ -1,7 +1,9 @@ import React from 'react'; import './Common.css'; +import { useSeoMeta } from '../hooks/useSeoMeta'; export default function Terms() { + useSeoMeta({ title: '이용약관', description: '(주)지오정보기술 이용약관. 서비스 이용 목적, 권리의무, 면책조항 등을 안내합니다.', path: '/terms' }); return (