블로그에 JSON-LD 스키마 적용하기

Updated on

목차:

JSON-LD 적용

항상 실제로 json-ld schema 가 seo 에 좋은 영향을 주는지 궁금했었다. 그래서 시도해보고 싶었는데, 시간이 없어서 시도 못하다가 오늘에서야 적용해본다. 근데 실제로 댓글이나 리뷰나 아니면 product 상품 정보의 경우 가격 정보 등이 들어가야하기 때문에 json-ld 를 필수적으로 적용해주는 것이 가장 best 로 알고 있다.

하지만, 블로그는 어떨지 처음이긴 하지만 시도해봤고, 시간이 지나면서 결과를 볼 수 있을 것이다.

1. JSON-LD escape backslash 가 있어도 상관 없는지 ?

{
    "@context": "https:\/\/schema.org",
    "@type": "ItemList",
    "itemListElement": "[{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":1,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/224\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":2,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/223\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":3,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/222\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":4,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/221\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":5,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/220\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":6,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/219\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":7,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/197\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":8,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/218\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":9,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/217\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":10,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/216\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":11,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/215\"},{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"ListItem\",\"position\":12,\"url\":\"https:\\\/\\\/ggami-dev.net\\\/posts\\\/214\"}]"
}

JSON-LD 를 적용할때, 위 처럼 \ escape 처리되어 있어도 JSON-LD 파서에 의해서 정상적으로 해석된다고 한다. 이게 문제가 되나 싶어서, gpt부터 google 검색까지 엄청나게 했지만, 결국에 gpt가 문제 없다고 해서 그냥 넘기기로 함.

GPT가 문제 없다고 한다.

2. query-input 을 추가해야하는지 ? (https://github.com/spatie/schema-org/issues/214)

이 문제에 대해서는 구글이 추가하라고 하길래, 그냥 추가했다.

->setProperty('query-input', 'required name=search_term_string')

추가하지 않아도 되지만, 구글에서 추가하라고 하기 때문에 커스텀 추가 했다.

3. 페이징이 있는 카테고리 페이지에서의 구현

{
    "@context": "https:\/\/schema.org",
    "@type": "CollectionPage",
    "name": "GGAMI.NET-dev : 개발",
    "url": "https:\/\/ggami-dev.net\/categories\/dev?page=4",
    "mainEntity": {
        "@type": "ItemList",
        "itemListElement": [{
            "@type": "ListItem",
            "position": 1,
            "url": "https:\/\/ggami-dev.net\/posts\/159"
        }, {
            "@type": "ListItem",
            "position": 2,
            "url": "https:\/\/ggami-dev.net\/posts\/154"
        }, {
            "@type": "ListItem",
            "position": 3,
            "url": "https:\/\/ggami-dev.net\/posts\/152"
        }, {
            "@type": "ListItem",
            "position": 4,
            "url": "https:\/\/ggami-dev.net\/posts\/149"
        }, {
            "@type": "ListItem",
            "position": 5,
            "url": "https:\/\/ggami-dev.net\/posts\/148"
        }, {
            "@type": "ListItem",
            "position": 6,
            "url": "https:\/\/ggami-dev.net\/posts\/144"
        }, {
            "@type": "ListItem",
            "position": 7,
            "url": "https:\/\/ggami-dev.net\/posts\/140"
        }, {
            "@type": "ListItem",
            "position": 8,
            "url": "https:\/\/ggami-dev.net\/posts\/139"
        }, {
            "@type": "ListItem",
            "position": 9,
            "url": "https:\/\/ggami-dev.net\/posts\/138"
        }, {
            "@type": "ListItem",
            "position": 10,
            "url": "https:\/\/ggami-dev.net\/posts\/124"
        }, {
            "@type": "ListItem",
            "position": 11,
            "url": "https:\/\/ggami-dev.net\/posts\/119"
        }, {
            "@type": "ListItem",
            "position": 12,
            "url": "https:\/\/ggami-dev.net\/posts\/116"
        }]
    }
}

CollectionPage 로 적용했다. CollectionPage 에서의 url은 파라메터 값을 넣을 수 있다고 한다. 그렇기 때문에, categories/dev?page=4 이렇게 파라메터를 넣어서 적용했다.

page 같은 파라메터를 다른 스키마에서는 추가하면 안되지만, CollectionPage 에서는 추가해도 되기 때문에 CollectionPage로 적용했다.

4. 블로그 글 자세히 보기 페이지에서의 구현

{
    "@context": "https:\/\/schema.org",
    "@type": "BlogPosting",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "inLanguage": "ko",
        "id": "https:\/\/ggami-dev.net\/posts\/220"
    },
    "headline": "laravel model casts 에서 laravel data collection 사용하는 방법",
    "articleBody": "모델의 배열을 커스텀 데이터 컬렉션으로 캐스팅하는 방법을 알려드립니다. 코드 한 줄로 강력한 데이터 관리를 경험해 보세요.",
    "articleSection": "[\"\\uac1c\\ubc1c\"]",
    "keywords": ["Laravel 모델 캐스팅", "Laravel Collection 사용법", "Laravel DataCollection 클래스", "ConfigValueData 컬렉션", "Laravel Eloquent 캐스트"],
    "author": {
        "@type": "Person",
        "name": "GGAMI"
    },
    "publisher": {
        "@type": "Organization",
        "name": "GGAMI.NET-dev",
        "url": "https:\/\/ggami-dev.net"
    },
    "datePublished": "2024-03-15T15:14:25+00:00",
    "dateModified": "2024-03-15T15:14:25+00:00"
}

이 처럼 구현했음.

이로서 json-ld 스키마 등록이 끝났다.

근데 사실 이 스키마 등록이 솔직히 맞는지 잘 모르겠다. 일단 등록을 했으니, 시간 지나고 얼마나 순위에 반영이 있는지? 혹은 없는지? 지켜보면 될 것 같다.

참고로 테스트는

https://search.google.com/test/rich-results?hl=ko

https://validator.schema.org/

이 두 사이트에서 가능하다.