워드프레스 Yoast SEO 플러그인의 스키마 API

Last Updated: 2019년 12월 15일 댓글

워드프레스 인기 SEO 플러그인인 Yoast SEO에는 스키마 마크업을 추가하는 기능이 탑재되어 있습니다. 하지만 Yoast에서는 BlogPosting 마크업이 지원되지 않습니다. 여기에 대해 Yoast에서는 다음과 같이 밝히고 있습니다.

We’d love to, but we’ve no way of automatically knowing whether a post (or, a post of a custom post type) should be considered a BlogPosting or not.

We’ll be thinking about how we best present options for this, but in the meantime, you could use our API to alter the output – see https://developer.yoast.com/schema-documentation/api/

즉, 포스트가 BlogPosting인지 여부를 자동으로 알 수 있는 방법이 없다고 합니다. 대신 Yoast에서 제공하는 Yoast SEO Schema API 문서를 참고하여 출력을 변경할 수 있습니다.

참고로 Schema App Structured Data라는 무료 플러그인은 BlogPosting을 지원하므로 포스트(글)의 타입을 'BlogPosting'으로 설정하고 싶은 경우 사용해볼 수 있습니다.

  • 페이지 : http://schema.org/Article
  • 포스트 (글) : http://schema.org/BlogPosting
  • 검색 : http://search.org/SearchResultsPage
  • 글쓴이 (작성자) : http://schema.org/ProfilePage
  • 카테고리 : http://schema.org/CollectionPage
  • 태그 : http://schema.org/CollectionPage
  • 블로그 : http://schema.org/Blog
  • BreadcrumbList : http://schema.org/BreadcrumbList

Schema라는 플러그인을 사용해도 블로그 글의 Type이 'BlogPosting'으로 지정됩니다. 이외에도 Schema & Structured Data for WP & AMP 플러그인은 BlogPosting을 비롯하여 33종의 스키마 타입을 지원한다고 하네요.

Yoast SEO를 사용하는 경우 "Yoast SEO Schema API" 문서를 참고하여 Yoast SEO에서 제공하는 스키마 마크업을 완전히 제거하고 스키마 전용 플러그인을 사용해볼 수 있습니다.

Yoast SEO 스키마를 완전히 제거

다음 코드를 사용 중인 테마의 함수 파일에 추가하면 모든 Yoast SEO의 스키마 출력이 비활성화됩니다.

add_filter( 'wpseo_json_ld_output', '__return_false' );

그래프 피스(graph piece) 추가 또는 제거

Schema output for Yoast SEO 문서에 설명되어 있듯이 일부 페이지에 다양한 그래프 피스가 출력됩니다. 일부를 제거하거나 추가하려는 경우 wpseo_schema_graph_pieces 필터를 사용할 수 있습니다.

example use-case에서 예제를 살펴볼 수 있습니다. Github에서 심화된 내용을 확인할 수 있습니다.

그래프 피스의 데이터 변경

특정 피스의 출력을 변경하려는 경우 wpseo_schema_<class> 필터를 사용할 수 있습니다. 예시:

add_filter( 'wpseo_schema_article', 'example_change_article' );

/**
 * Change @type of Article Schema data.
 * Article Schema 데이터의 @type 변경
 *
 * @param array $data Schema.org Article data array.
 *
 * @return array $data Schema.org Article data array.
 */
function example_change_article( $data ) { 
  $data['@type'] = 'NonsensePage'; 
  return $data; 
}

스키마에 이미지 추가

개체(object)에 프로그램적으로 이미지를 추가하려면 다음과 같은 코드를 사용하면 됩니다.

add_filter( 'wpseo_schema_article', 'example_change_article' );

/**
 * Add images to Article Schema data.
 * Article 스키마 데이터에 이미지 추가
 *
 * @param array $data Schema.org Article data array.
 *
 * @return array $data Schema.org Article data array.
 */
function example_change_article( $data ) { 
  // This is the attachment ID for our image.
  $image_id = 12345; 
  
  // We instantiate the image class, it always needs an $id, so the output can be referenced by other graph pieces.
  $id = "#image_12345";
  $schema_image = new WPSEO_Schema_Image( $id );

  // Now we just generate and add the image output.
  $data['image'] = $schema_image->generate_from_attachment_id( $image_id );

  return $data; 
}

구텐베르크 (Gutenberg) 블럭용 스키마

블럭 에디터("구텐베르크")의 블럭을 작성하는 경우 스키마 아웃풋도 추가하고 싶을 것입니다. 이 경우 두 가지 유용한 후크(hook)를 사용할 수 있습니다.

페이지에 어떤 블럭이 있는지 인식

먼저 페이지에서 어떤 블럭이 있는지 알아야 합니다. wpseo_pre-schema_block-type_<block-type> 액션으로 알 수 있습니다. 이 액션이 블럭 유형을 Fire하면 블럭 유형이 페이지에 출력됩니다.

예를 들어, 이 필터를 사용하여 간단한 다음과 같은 함수로 FAQ 블럭에서 WebPage@type을 변경할 수 있습니다.

add_action( 'wpseo_pre_schema_block_type_yoast/faq-block', array( $this, 'prepare_faq_schema' ), 10, 1 );

/**
 * If this fires, we know there's an FAQ block on the page, so filter the page type.
 *
 * @param array $blocks The blocks of this type on the current page.
 */
public function prepare_schema( $blocks ) {
   $this->blocks    = $blocks;
   $this->is_needed = true;
   add_filter( 'wpseo_schema_webpage_type', array( $this, 'change_schema_page_type' ) );
}

이 코드는 클래스 내부에서 취해 온 것으로 wpseo_pre-schema_block-type_<block-type> 액션이 해당 타입의 모든 블럭의 배열(array)을 인수(argument)로 가져옵니다. 그러면 Yoast SEO에서 이러한 정보를 클래스에 저장하여 나중에 이 데이터를 사용하여 출력을 결정합니다.

특정 블럭의 출력

특정 블럭의 출력을 추가해야 하는 경우 wpseo_schema_block_<block-type> 필터를 사용할 수 있습니다. 이 필터에는 3가지 파라미터가 있습니다.

  • $graph: 반환해야 하는 것으로 블럭에 기초하여 그래프를 필터링할 수 있도록 허용함(which you have to return, which allows you to filter the graph based on your block)
  • $block: 이 필터가 파이어(fire)하는 대상의 블럭 콘텐츠.
  • $context: 사이트 URL, 캐노니컬 등과 같이 출력에 사용할 수 있는 환경 변수를 가진 WPSEO_Schema_Context 개체임

예를 들어, FAQ 블럭을 다음과 같이 후크할 수 있습니다.

add_filter( 'wpseo_schema_block_yoast/faq-block', array( $this, 'render_schema_questions' ), 10, 3 );

그러면, 이 플러그인이 FAQ 블럭을 만나면 다음 함수가 호출되며, 자체적으로 새 클래스를 호출합니다.

/**
 * Add the Questions in our FAQ blocks as separate pieces to the graph.
 *
 * @param array                 $graph   Schema data for the current page.
 * @param WP_Block_Parser_Block $block   The block data array.
 * @param WPSEO_Schema_Context  $context A value object with context variables.
 *
 * @return array $data Our Schema graph.
 */
public function render_schema_questions( $graph, $block, $context ) {
	$questions = new WPSEO_Schema_FAQ_Questions( $graph, $block, $context );
	$graph     = $questions->generate();

	return $graph;
}

보다 구체적인 필터

필터에 따라 그래프 피스 활성화 / 비활성화

종종 다른 변수에 따라 그래프 피스를 활성화하거나 비활성하고 싶을 수 있습니다. 예를 들어, 사이트에 Person을 항상 표시할 수 있습니다. 이와 같은 상황에서 wpseo_schema_needs_<class-name> 필터로 후크할 수 있습니다.

add_filter( 'wpseo_schema_needs_person', '__return_true');
add_filter( 'wpseo_schema_person_user_id', function() { 
  return 1; // Make sure 1 is a valid User ID.
} );

소셜 프로필

Author 페이지에 표시할 프로필을 변경하고 싶은 경우 wpseo_schema_person_social_profiles 필터로 후크할 수 있습니다. Yoast에서는 yoast.com에서 사람들의 개인 사이트뿐만 아니라 사람들의 GitHub와 WordPress 프로필을 sameAs 출력에 추가하고 있습니다.

add_filter( 'wpseo_schema_person_social_profiles', 'yoast_add_social_profiles' );

/**
 * Adds social profiles to our sameAs array.
 * SNS 프로필을 sameAs 배열에 추가
 *
 * @param array $profiles Social profiles.
 *
 * @return array $profiles Social profiles.
 */
function yoast_add_social_profiles( $profiles ) {
  array_push( $profiles, 'github', 'personal', 'wordpress' );

  return $profiles;
}

기타 필터

편의를 위해 다음과 같은 필터도 제공됩니다.

  • wpseo_schema_webpage_type - 페이지 타입 변경. 상기 예제보다 더욱 심플하게 사용 가능.
  • disable_wpseo_json_ld_search - true를 반환하는 경우 모든 페이지에 추가하는 검색 potentialAction을 비활성화함.
  • wpseo_json_ld_search_url - 사이트의 검색 URL 변경 가능.
  • wpseo_schema_article_post_type - Article 그래프 피스를 출력할 포스트 타입 변경 가능.
  • wpseo_schema_person_user_id - 사이트가 사람을 대리(represent)하는 경우 사이트를 대표하는 데 사용하는 사용자의 ID 변경 가능.

참고:


댓글 남기기

Leave a Comment