준비
강의 전 현재 폴더, 계정, 설치 상태를 확인합니다.
AI업무학교의 콘텐츠 작성 원칙을 실제 웹 운영으로 옮깁니다. 단일 프로필, 보이는 내용과 일치하는 구조화 데이터, 대표 URL과 사이트맵, 고정 질문 측정판을 코드와 배포 점검으로 구현합니다.
Execution Kit
강의 전 현재 폴더, 계정, 설치 상태를 확인합니다.
AI업무학교는 콘텐츠의 첫답변·근거·비식별화 기준을, 이 모듈은 프로필·스키마·대표 URL·사이트맵·측정 구현을 맡습니다.
명령 결과, 파일 변화, 브라우저 화면 중 하나로 성공 여부를 확인합니다.
잘 된 명령과 막힌 지점을 다음 실습을 위한 로그로 남깁니다.
막혔을 때 Claude Code에 붙여넣을 양식
나는 코딩 경험이 많지 않은 실무자입니다. "네이버 AI탭 시대의 기술 구현 — 프로필·스키마·대표 URL·사이트맵·질문 측정" 강의를 따라 하고 있습니다.
현재 상태:
- 사용하는 컴퓨터:
- 방금 실행한 명령:
- 화면에 나온 결과 또는 오류:
- 내가 만들고 싶은 업무 결과물:
요청:
1. 지금 상황을 초보자 기준으로 진단해줘.
2. 다음에 실행할 명령을 한 줄씩 제시해줘.
3. 각 명령이 무엇을 하는지 쉬운 말로 설명해줘.
4. 성공 여부를 확인할 체크 포인트를 정리해줘.
5. 실패하면 다시 붙여넣을 오류 보고 양식을 만들어줘.// src/config/business-profile.ts
export const businessProfile = {
name: "확인된 공식 사업명",
address: "공개·확인된 사업장 주소",
telephone: "공개·확인된 대표 전화",
url: "https://example.com/",
sameAs: ["공식 블로그 URL", "공식 플레이스 URL"],
} as const;
// 화면, JSON-LD, 연락처 컴포넌트는 이 객체만 사용합니다.
// 플레이스 정보는 자동 수정하지 않고 공식 관리자 화면에서 대조합니다.const jsonLd = {
"@context": "https://schema.org",
"@type": ["ProfessionalService", "LocalBusiness"],
"@id": new URL("#business", businessProfile.url).toString(),
name: businessProfile.name,
url: businessProfile.url,
telephone: businessProfile.telephone,
address: {
"@type": "PostalAddress",
streetAddress: businessProfile.address,
},
sameAs: businessProfile.sameAs,
};
// 화면에 없는 평점·후기·수상 정보는 넣지 않습니다.const siteUrl = process.env.NEXT_PUBLIC_SITE_URL;
if (!siteUrl?.startsWith("https://")) {
throw new Error("공개 대표 URL을 HTTPS 절대 주소로 설정하세요.");
}
export const canonicalUrl = (path: string) =>
new URL(path, siteUrl).toString();
// sitemap.xml에는 canonicalUrl()이 만드는 최종 공개 주소만 넣습니다.type QuestionObservation = {
checkedAt: string;
question: string;
serviceArea: "병원노무" | "산재보상" | "산업안전" | "노동분쟁" | "AI문서검증";
publicSourceUrl?: string;
resultType: "직접답변" | "공식출처" | "자사페이지연결" | "미확인";
evidenceUrl?: string;
followUp: "없음" | "근거갱신" | "첫답변보완" | "NAP확인";
};
// 이 기록은 노출 보장용 순위표가 아니라 공개 화면의 정기 관찰 로그입니다.