본문 바로가기

개발/troubleshooting

[React] Helmet으로 og tag 설정시 이미지 적용 안되는 문제

요즘 chatGPT를 사용해서 react로 웹개발을 하고있는데, 이렇게 하다보니 별것아닌문제를 오랫동안 해결을 못하는경우가 종종 생기는것 같다.

그 중 하나가 페이지 공유시 OpenGraph tag로 설정한 것들이 제대로 안나오는 문제 였다.

 

문제코드 & 문제현상

우선 처음에는 단순하게 meta tag를 js 파일에서 수정하고 싶다는 생각이었고, 결국 아래와같이 처리하게 되었다.

import { HelmetProvider, Helmet } from "react-helmet-async";

function MyPage(){
...
return 
(<div>
  <HelmetProvider>
    <Helmet>      
        <meta property="og:title" content="Title" />
        <meta property="og:description" content="Description" />
        <meta property="og:image" content="%PUBLIC_URL%/ogImage.png" />
        <meta property="og:url" content="https://mydomain.com/page1.html" />     
    </Helmet>
  </HelmetProvider>
</div>);
}

이렇게 하고 배포한 뒤에 페이지를 카카오톡에 공유해봤는데, title만 나오고 description이나 image들은 모두 누락되는 상태가 발생했다. title도 og meta tag 로 설정한 것이 아니라, 일반 <title> tag로 설정한 것이 나오고 있었다.

 

참고로 react+next 프로젝트에서 next/head 를 사용하여 같은 opengraph meta tag 를 설정했을때는 문제없이 잘 나오고 있었다. 그래서 개발자도구의 소스코드에서 표시되는 내용을 확인해봤는데, 이것역시 큰 차이가 없었다. 

 

잘못된 추측들

혹시나 head내부에 meta, title, script, link등의 순서와 관련된 문제는 아닐지?

meta tag 끝에 슬래시(/)를 안붙이는게 맞는것 아닐지?

등등 사소한 문제를 의심하며 수정을 해봤는데 모두 큰 의미가 없었다.

 

문제원인

결국 잠시의 웹서핑 끝에 문제를 특정할 수 있었다.

Helmet은 React 어플리케이션에서 동적으로 head 태그를 변경하는데에 사용하는 라이브러리 이기때문에, 페이스북, 구글, 트위터, 카카오톡 등과 같은 크롤러에서 즉시 처리를 하지 못할 수 있다.

 

문제해결

index.html 의 head 내부로 meta tag 이동

이번에 문제가 생긴 프로젝트는 페이지 하나짜리라서, 꼭 js에서 사용해야할 이유는 없었기때문에 index.html파일의 <head> 내부로 meta tag를 옮기므로써 바로 해결 할 수 있었다.

위에 사용하던 meta tag 코드 그대로 옮기면된다.

 

카카오 캐시 초기화

이때 또 문제가있어 바로 해결된 것을 볼수가 없었는데, 카카오에 이전에 캐시된 내역이 있어 og 값으로 바로 바뀌지 않는 문제였다.(카카오톡이나 티스토리 링크를 사용할때 문제가 나타난다.)

이 문제는 kakao developers에 공유디버거 도구를 이용해서 해결할 수 있었다.

https://developers.kakao.com/tool/debugger/sharing

웹페이지 주소 입력후, 캐시초기화를 누르면 캐시된 내역이 삭제되었음을 알려주고, 이후 디버그 버튼을 눌러보면 수정된 링크 미리보기를 확인할 수 있다.

 

 

해결후..

chatGPT를 사용하다 보면 타율도 꽤 높고 편하기때문에 점점 의존하게 된다.

원래라면 검색해서 개념부터 확실히 알고 사용할것들을, 제대로 모르는데도 마구잡이로 사용하게되면서 이런 문제가 나오는것 같다. 이부분은 좀더 조심하고, 당장 필요가 없을지라도 동작하는 원리를 이해하는데 좀더 시간을 써보도록하자.