구조화된 과정 정보(Course
및 CourseInstance
) 데이터
구조화된 과정 정보 데이터를 사용해 Google에 내 과정을 알리면 사람들이 내 교육 과정 콘텐츠를 찾는 데 도움이 됩니다. 리뷰 작성자 평점, 가격, 과정 세부정보 등 특정 과정에 관한 자세한 정보를 제공하면 Google에서 이 과정을 더 잘 이해하고 과정 정보 리치 결과를 통해 사용자에게 풍부한 환경을 제공할 수 있습니다.
과정에는 리치 결과 기능이 두 가지 있는데, 두 가지 다 동일한 schema.org Course
유형을 사용합니다.
사이트에서 과정 정보를 제공하는 경우 다음의 두 구현 가이드에 따라 두 기능을 모두 사용할 수 있습니다.
기능 제공 여부
과정 정보 리치 결과는 Google 검색이 지원되는 모든 지역에서 영어로 제공됩니다. 앞으로 더 다양한 영어 이외의 언어로 과정을 지원할 수 있도록 노력하겠습니다.
구조화된 데이터를 추가하는 방법
구조화된 데이터는 페이지 정보를 제공하고 페이지 콘텐츠를 분류하기 위한 표준화된 형식입니다. 구조화된 데이터를 처음 사용한다면 구조화된 데이터의 작동 방식을 자세히 알아보세요.
다음은 구조화된 데이터를 빌드, 테스트 및 출시하는 방법의 개요입니다. 웹페이지에 구조화된 데이터를 추가하는 방법에 관한 단계별 안내는 구조화된 데이터 Codelab을 참고하세요.
- 필수 속성을 추가합니다. 사용 중인 형식에 따라 페이지에 구조화된 데이터를 삽입하는 위치를 알아보세요.
- 가이드라인을 따릅니다.
- 리치 결과 테스트를 사용하여 코드의 유효성을 검사하고 심각한 오류를 해결하세요. 또한 도구에서 신고될 수 있는 심각하지 않은 문제는 구조화된 데이터의 품질을 개선하는 데 도움이 될 수 있으므로 해결하는 것이 좋습니다. 그러나 리치 결과를 사용하기 위한 필수사항은 아닙니다.
- 구조화된 데이터를 포함하는 일부 페이지를 배포하고 URL 검사 도구를 사용하여 Google에서 페이지를 표시하는 방법을 테스트합니다. Google이 페이지에 액세스할 수 있으며
robots.txt 파일,
noindex
태그 또는 로그인 요구사항에 의해 차단되지 않는지 확인합니다. 페이지가 정상적으로 표시되면 Google에 URL을 재크롤링하도록 요청할 수 있습니다. - Google에 향후 변경사항을 계속 알리려면 사이트맵을 제출하는 것이 좋습니다. 이는 Search Console Sitemap API를 사용하여 자동화할 수 있습니다.
예
다음은 단일 과정 정보 페이지의 예시입니다.
<html> <head> <title>Introduction to Computer Science and Programming</title> <script type="application/ld+json"> { "@context": "https://schema.org/", "@id": "https://www.example.com/advancedCpp", "@type": "Course", "name": "Learn Advanced C++ Topics", "description": "Improve your C++ skills by learning advanced topics.", "publisher": { "@type": "Organization", "name": "CourseWebsite", "url": "www.examplecoursewebsite.com" }, "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" }, "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ], "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4, "ratingCount": 1234, "reviewCount": 450 }, "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }], "totalHistoricalEnrollment": 12345, "datePublished": "2024-03-21", "educationalLevel": "Advanced", "about": ["C++ Coding", "Backend Engineering"], "teaches": ["Practice and apply systems thinking to plan for change", "Understand how memory allocation works."], "financialAidEligible": "Scholarship Available", "inLanguage": "en", "availableLanguage": ["fr", "es"], "syllabusSections": [ { "@type": "Syllabus", "name": "Memory Allocation", "description": "Learn how memory is allocated when creating C++ variables.", "timeRequired": "PT6H" }, { "@type": "Syllabus", "name": "C++ Pointers", "description": "Learn what a C++ pointer is and when they are used.", "timeRequired": "PT11H" } ], "review": [ { "@type": "Review", "author": { "@type": "Person", "name": "Lou S." }, "datePublished": "2024-08-31", "reviewRating": { "@type": "Rating", "bestRating": 10, "ratingValue": 6 } }], "coursePrerequisites": [ "Basic understanding of C++ up to arrays and functions.", "https://www.example.com/beginnerCpp" ], "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.example.com", "credentialCategory": "Certificate", // offers only needed if the credential costs extra money. "offers": [{ "@type": "Offer", "category": "Paid", "price": 5, "priceCurrency": "USD" }] }], "video": { "@type": "VideoObject", "name": "Video name", "description": "A video previewing this course.", "uploadDate": "2024-03-28T08:00:00+08:00", "contentUrl": "www.example.come/mp4", "thumbnailUrl": "www.example.com/thumbnailurl.jpg" }, "hasCourseInstance": [ { // Blended, instructor-led course meeting 3 hours per day in July. "@type": "CourseInstance", "courseMode": "Blended", "location": "Example University", "courseSchedule": { "@type": "Schedule", "duration": "PT3H", "repeatFrequency": "Daily", "repeatCount": 31, "startDate": "2024-07-01", "endDate": "2024-07-31" }, "instructor": [{ "@type": "Person", "name": "Ira D.", "description": "Professor at X-University", "image": "http://example.com/person.jpg" }] }, { // Online self-paced course that takes 2 days to complete. "@type": "CourseInstance", "courseMode": "Online", "courseWorkload": "P2D" }], // Only required for course programs that link to child courses. "hasPart": [{ "@type": "Course", "name": "C++ Algorithms", "url": "https://www.example.com/cpp-algorithms", "description": "Learn how to code base algorithms in c++.", "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" } }, { "@type": "Course", "name": "C++ Data Structures", "url": "https://www.example.com/cpp-data-structures", "description": "Learn about core c++ data structures.", "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" } }] } </script> </head> <body> </body> </html>
가이드라인
Google 검색에 과정이 과정 정보 리치 결과로 표시되려면 다음 가이드라인을 따라야 합니다.
콘텐츠 가이드라인
'특정 과목 또는 주제에 관한 강좌, 강의, 모듈을 포함하는 교육과정의 시리즈 또는 단위'라는 과정의 정의를 충족하는 교육용 콘텐츠에만 마크업을 사용하세요.
Course
마크업은 전체 단일 과정 또는 과정 프로그램을 제공하는 웹페이지에 있어야 합니다. 다음 예에서는 과정 정보 리치 결과를 사용할 수 없습니다.
- 학위 요약 페이지
- 단독 시험 페이지
- 일반적인 공개 이벤트(예: '천문학의 날')
- 2분 길이의 한 편짜리 '샌드위치 만들기 동영상'
구조화된 데이터 유형 정의
콘텐츠를 Google 검색에 리치 결과로 표시하려면 필수 Course
및 CourseInstance
속성이 있어야 합니다. 권장 속성을 통해 콘텐츠에 관한 정보를 추가하여 더 만족스러운 사용자 환경을 제공할 수 있습니다.
Course
과정은 단독으로 또는 프로그램의 일부로 수강할 수 있는 개별적인 교육과정 단위입니다.
Course
의 전체 정의는 schema.org/Course에서 확인할 수 있습니다.
필수 속성 | |
---|---|
name |
전체 과정 제목입니다. "name": "Intro to Statistics" |
description |
과정에 관한 설명입니다.
"description": "This course teaches the basics of statistical thinking." |
provider |
과정 콘텐츠를 만든 조직에 관한 정보입니다. "provider": { "@type": "Organization", "name": "Example University", "url": "www.exampleuniversity.com" } |
provider.name |
Text
과정 제공업체의 이름입니다. |
offers |
반복형 서비스 수수료를 비롯하여 과정을 이수하는 데 필요한 총 금액 정보입니다. 일부 사용자에게만 적용되는 가격(예: 신규 사용자의 경우 20% 할인)을 등록하지 마세요. 이 필드에 추가 인증서 수수료를 포함하면 안 됩니다. 인증서를 취득에 추가 요금이 있는 경우 "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }] |
offers.category |
Text
과정의 가격 카테고리입니다. 다음 중 한 가지 값을 사용하세요.
|
hasCourseInstance |
반복형 모든 과정에는 과정에서 제공하는 항목에 대한 자세한 정보가 포함된 과정 인스턴스가 하나 이상 있어야 합니다. 필수 속성과 권장 속성에 관해 알아보려면 "hasCourseInstance": [{ // Onsite, instructor-led class meeting weekly in August 2023 "@type": "CourseInstance", "courseMode": "Onsite", "location": "Example University", "courseSchedule": { "@type": "Schedule", "duration": "PT5H", "repeatCount": 4, "repeatFrequency": "Weekly", "startDate": "2023-08-01", "endDate": "2023-8-31" }, "instructor": [{ "@type": "Person", "name": "Kai S.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] }] |
권장 속성 | |
---|---|
about |
반복형 과정을 이수하면 얻게 되는 기술을 설명합니다(해당하는 경우). "about": ["Quantitative Analysis", "Critical Thinking"] |
aggregateRating |
과정을 수강한 사용자가 남긴 평점을 기반으로 작성된 평균 과정 평점 정보입니다(해당하는 경우). 리뷰 스니펫 가이드라인과 필수 및 권장 "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "ratingCount": 255, "reviewCount": 189 } |
availableLanguage |
반복형 과정이 제공되는 자막 또는 기타 언어입니다(해당하는 경우). ISO 639-1 alpha-2 코드 목록의 두 글자 코드를 사용하세요. "availableLanguage": ["fr", "es", "de"] |
coursePrerequisites |
반복형 과정에 필요한 사전 지식입니다(해당하는 경우). 사전 지식이나 다른 과정과의 연관성, 또는 둘 다로 나타낼 수 있습니다. "coursePrerequisites": ["Understanding of Algebra concepts like variables and functions", "https://www.coursewebsite.abc/algebra"] |
datePublished |
과정이 처음 게시된 날짜입니다(해당되는 경우). 8601 날짜 형식(YYYY-MM-DD)을 사용하세요. "datePublished": "2019-03-21" |
educationalCredentialAwarded |
반복형 과정을 수료하면 받을 수 있는 인증서 또는 자격증 정보입니다(해당하는 경우). 인증서나 자격증을 받기 위해 추가 비용이 부과되는 경우 이 비용을 명시해야 합니다. "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.examplecertificate.com", "credentialCategory": "Certificate", "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "USD", "price": 5 }] }] |
educationalCredentialAwarded.credentialCategory |
Text
사용자가 받게 될 보상 유형입니다(해당하는 경우). 다음 중 한 가지 값을 사용하세요.
|
educationalCredentialAwarded.name |
Text
보상 이름입니다(해당하는 경우). |
educationalCredentialAwarded.offers.category |
Text
보상에 드는 비용 유형입니다(해당하는 경우). 다음 카테고리 중 한 가지 값을 사용하세요.
|
educationalCredentialAwarded.offers.price |
Number
보상의 가격을 숫자로 표시한 것입니다(해당하는 경우). |
educationalCredentialAwarded.offers.priceCurrency |
Text
보상 가격의 통화로, ISO 4217 통화 형식(3자리 코드)으로 표시됩니다(해당하는 경우). |
educationalCredentialAwarded.url |
URL
보상 페이지 링크입니다(해당하는 경우). |
educationalLevel |
과정의 목표 학력입니다(해당하는 경우). 다음 값 중 하나를 선택하세요.
"educationalLevel": "Beginner" |
financialAidEligible |
과정을 수강하고자 하는 사용자에게 제공되는 장학금, 특별 요금, 기타 재정적 지원 기회입니다(해당하는 경우). "financialAidEligible": "Scholarships available for eligible users." |
image |
반복형 과정을 대표하는 이미지의 URL입니다(해당하는 경우). 로고나 캡션보다는 과정과 관련된 이미지를 사용하세요. 추가 이미지 가이드라인
예: "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
inLanguage |
과정이 제공되는 기본 언어입니다(해당하는 경우). ISO 639-1 alpha-2 코드 목록의 두 글자 코드를 사용하세요. "inLanguage": "en" |
offers.price |
Number
보상의 가격을 숫자로 표시한 것입니다(해당하는 경우). 이 필드에 통화 기호와 같은 다른 정보를 입력해서는 안 됩니다. |
offers.priceCurrency |
Text
과정 가격의 통화로, ISO 4217 통화 형식(3자리 코드)으로 표시됩니다(해당하는 경우). |
provider.url |
URL
과정 제공업체의 홈페이지로 연결되는 URL입니다(해당하는 경우). |
publisher |
과정을 게시하고 표시하는 조직에 관한 정보입니다(해당하는 경우). "publisher": { "@type": "Organization", "name": "Course Website", "url": "www.example.com" } |
publisher.name |
Text
과정 게시자의 이름입니다(해당하는 경우). |
publisher.url |
URL
과정 게시자의 홈페이지로 연결되는 URL입니다(해당하는 경우). |
review |
반복형 과정에 대한 사용자 리뷰 목록입니다(해당하는 경우). 자세한 내용은 리뷰 스니펫 가이드라인을 참고하세요. "review": [{ "@type": "Review", "author": { "@type": "Person", "name": "Sasha J." }, "datePublished": "2021-09-22", "reviewRating": { "@type": "Rating", "ratingValue": 4 } }] |
syllabusSections |
반복형 과정을 구성하는 다양한 모듈에 관한 정보입니다(해당하는 경우). "syllabusSections": [{ "@type": "Syllabus", "name": "Algebra Review", "description": "Review prerequisite Algebra concepts.", "timeRequired": "PT2H30M" }, { "@type": "Syllabus", "name": "Statistics Terms", "description": "Learn the definitions of basic statistics terms.", "timeRequired": "PT5H" }] |
syllabusSections.description |
Text
모듈 개념에 관한 설명입니다(해당하는 경우). |
syllabusSections.name |
Text
과정 모듈의 이름입니다(해당하는 경우). |
syllabusSections.timeRequired |
Duration
8601 기간 형식을 사용하세요(해당하는 경우).
예를 들어 |
teaches |
반복형 과정을 수강함으로써 배우게 되는 학습 결과 또는 특정 지식입니다(해당하는 경우). "teaches": ["How to use visualization tools and graphs", "Why stats is important"] |
totalHistoricalEnrollment |
과정의 전체 기간 동안 등록한 총 사용자 수입니다(해당하는 경우). "totalHistoricalEnrollment": 80032 |
video |
과정의 동영상 미리보기 또는 예고편입니다(해당하는 경우). 자세한 내용은 "video": { "@type": "VideoObject", "name": "Video name", "description": "A video previewing this course.", "uploadDate": "2022-03-28T08:00:00+08:00", "contentUrl": "www.videourl.mp4", "thumbnailUrl": "www.thumbnailurl.jpg" } |
CourseInstance
CourseInstance
의 전체 정의는 schema.org/CourseInstance에서 확인하세요.
모든 과정에는 필수 속성이 입력된 CourseInstance
가 하나 이상 있어야 합니다.
필수 속성 | |
---|---|
courseMode |
과정이 제공될 매체입니다. 다음 중 한 가지 값을 사용하세요.
클래스가 "courseMode": "Online" |
courseSchedule |
권장 진도를 고려하여 평균적인 사용자가 과정을 완료하는 데 걸리는 시간에 대한 정보입니다. 정해진 타임라인에 있는 과정의 시작일과 종료일을 포함합니다. 다음은 언제든지 시작할 수 있는 진도 조절 과정의 예입니다. // This course takes 6 weeks to complete. "courseSchedule": { "@type": "Schedule", "repeatCount": 6 "repeatFrequency": "Weekly", } 다음은 정해진 시간 동안 진행되는 과정의 예입니다. // This course expects 1 hour per day during July 2023 "courseSchedule": { "@type": "Schedule", "duration": "PT1H", "repeatCount": 31 "repeatFrequency": "Daily", "startDate": "2023-07-01", "endDate": "2023-07-31" } |
courseSchedule.repeatCount |
Integer
과정에 소요되는 시간의 숫자 값( |
courseSchedule.repeatFrequency |
Text
|
courseWorkload |
Text
이 필드는 모든 동영상을 시청하고 과정의 모든 과제와 시험을 완료하는 데 걸리는 총 시간을 나타냅니다. 8601 기간 형식을 사용하세요. "courseWorkload": "PT22H" |
권장 속성 | |
---|---|
courseSchedule.duration |
Duration
이 속성을 사용하여 전체 과정 길이를 지정하지 마세요. 대신 |
courseSchedule.endDate |
Date
8601 날짜 형식(YYYY-MM-DD)으로 표시된 과정의 종료일입니다(해당하는 경우). |
courseSchedule.startDate |
Date
8601 날짜 형식(YYYY-MM-DD)으로 표시된 과정의 시작일입니다(해당하는 경우). |
image |
URL
강사 이미지로 연결되는 URL입니다(해당하는 경우). 추가 이미지 가이드라인
예: "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
instructor |
반복형 과정의 강사에 관한 정보입니다(해당하는 경우). "instructor": [{ "@type": "Person", "name": "Dana A.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] |
instructor.description |
Text
강사 및 자격증 설명입니다(해당하는 경우). |
instructor.name |
Text
강사 이름입니다(해당하는 경우). |
location |
과정을 교육할 실제 위치의 이름 또는 주소 (또는 둘 다)입니다(해당하는 경우). "courseMode": "Blended", "location": "Example High School" |
과정 프로그램
과정 프로그램은 하위 과정의 모음입니다. 하위 과정은 고유한 URL과 방문 페이지가 있는 독립형 과정이어야 합니다.
웹페이지가 과정 프로그램인 경우 다음의 필수 속성(Course
및 CourseInstance
섹션에 나열된 다른 필수 속성도 포함해야 함)을 포함하세요.
필수 속성 | |
---|---|
hasPart |
반복형 이 프로그램에 포함된 하위 과정 목록입니다. "@context": "https://schema.org/", "@type": "Course", "name": "Learning Pathway: Knitting", "url": "www.example.com/knitprogram" // Fill the other required Course and CourseInstance properties "hasPart": [{ "@type": "Course", "name": "Intro to Knitting", "url": "www.example.com/knitbasics", "description": "Learn the basics of how to knit." }, { "@type": "Course", "name": "Knit a Sweater", "url": "www.example.com/knitsweater", "description": "Learn to knit an entire sweater." }] |
hasPart.name |
Text
하위 과정의 전체 제목입니다. |
hasPart.url |
URL
하위 과정 방문 페이지로 연결되는 URL입니다. |
권장 속성 | |
---|---|
hasPart.description |
Text
하위 과정에서 다루는 내용에 관한 간략한 설명입니다(해당하는 경우).
|
Search Console로 리치 결과 모니터링하기
Search Console은 Google 검색에서의 페이지 실적을 모니터링하는 데 도움이 되는 도구입니다. Search Console에 가입해야만 페이지가 Google 검색결과에 포함되는 것은 아니지만, 가입하면 Google에서 사이트를 인식하는 방식을 이해하고 개선하는 데 도움이 될 수 있습니다. 다음과 같은 경우 Search Console을 확인하는 것이 좋습니다.
구조화된 데이터를 처음 배포한 후
Google에서 페이지의 색인을 생성하고 나면 관련 리치 결과 상태 보고서를 사용하여 문제를 확인합니다. 유효한 항목 수가 증가하고 잘못된 항목 수는 증가하지 않는 것이 가장 좋습니다. 구조화된 데이터에 문제가 있는 경우 다음과 같이 해결하세요.
- 잘못된 항목을 수정하세요.
- 실제 URL을 검사하여 문제가 지속되는지 확인합니다.
- 상태 보고서를 사용하여 유효성 검사를 요청합니다.
새 템플릿을 출시하거나 코드를 업데이트한 후
웹사이트를 대폭 변경한 후 구조화된 데이터의 잘못된 항목이 증가하는지 모니터링하세요.- 잘못된 항목이 증가했다면 새로 출시한 템플릿이 제대로 작동하지 않거나 사이트가 기존의 템플릿과 좋지 않은 방식으로 상호작용하게 된 것일 수 있습니다.
- 유효한 항목이 감소했다면(잘못된 항목 증가와 일치하지 않음) 페이지에 구조화된 데이터를 더 이상 삽입하지 않는 것일 수 있습니다. URL 검사 도구를 사용하여 문제를 일으키는 원인을 알아보세요.
주기적으로 트래픽 분석
실적 보고서를 사용하여 Google 검색 트래픽을 분석합니다. 데이터를 통해 페이지가 Google 검색의 리치 결과로 표시되는 빈도, 사용자가 검색결과를 클릭하는 빈도, 검색결과에 표시되는 평균 게재순위를 확인할 수 있습니다. Search Console API를 사용하여 이러한 결과를 자동으로 가져오는 방법도 있습니다.문제 해결
구조화된 데이터를 구현하거나 디버깅하는 데 문제가 있다면 다음 리소스를 참고하세요.
- 콘텐츠 관리 시스템(CMS)을 사용하거나 다른 사람이 내 사이트를 관리한다면 도움을 요청하세요. 문제를 자세히 설명하는 모든 Search Console 메시지를 CMS나 관리자에게 전달해야 합니다.
- Google은 구조화된 데이터를 사용하는 기능이라고 해서 검색결과에 표시된다고 보장하지 않습니다. Google에서 콘텐츠를 리치 결과로 표시할 수 없는 일반적인 이유 목록은 구조화된 데이터 일반 가이드라인을 참고하세요.
- 구조화된 데이터에 오류가 있을 수 있습니다. 구조화된 데이터의 오류 목록을 확인하세요.
- 페이지에 구조화된 데이터 직접 조치를 취하는 경우 페이지에 있는 구조화된 데이터는 무시됩니다. 하지만 페이지는 계속 Google 검색결과에 표시될 수 있습니다. 구조화된 데이터 문제를 해결하려면 직접 조치 보고서를 사용하세요.
- 가이드라인을 다시 검토하여 콘텐츠가 가이드라인을 준수하지 않는지 확인합니다. 스팸성 콘텐츠 또는 스팸성 마크업의 사용으로 인해 문제가 발생할 수 있습니다. 하지만 해당 문제가 구문 문제가 아닐 수도 있고, 이 경우 리치 결과 테스트에서는 이 문제를 식별할 수 없습니다.
- 누락된 리치 결과/총 리치 결과 수 감소 문제를 해결하세요.
- 다시 크롤링이 이루어지고 색인이 생성될 때까지 기다리세요. 페이지가 게시된 후 Google에서 페이지를 찾고 크롤링하기까지 며칠 정도 걸릴 수 있습니다. 크롤링 및 색인 생성에 관한 일반적인 질문은 Google 검색 크롤링 및 색인 생성 FAQ를 참고하세요.
- Google 검색 센터 포럼에 질문을 올려보세요.