http에서 https로 변경 시 페이스북 like button 값 복구

Share
http에서 https로 변경 시 페이스북 like button 값 복구

popit 서비스를 http에서 https 로 변환하는 작업을 진행하였는데 인증서 적용하는데는 특별한 문제가 없었습니다. 인증서 다운로드 및 nginx 설정 만으로 https 적용하는 것은 쉽게 해결되었습니다. https 전환 후 발생하는 문제가 있는데 각 글의 페이스북 좋아요 수치가 '0' 으로 초기화 되는 문제였습니다. 이번 글에서는 http -> https 전환 시 페이스북의 Social plugin 중 하나인 특정 URL(웹 페이지)에 대한 좋아요 버튼 수치를 그대로 유지하는 방법에 대해 알아보겠습니다.

페이스북은 URL 기반으로 관리

먼저 페이스북 좋아요 버튼의 동작 원리를 알아 보겠습니다. 페이스북은 특정 페이지에 대한 정보를 URL 기반으로 관리하고 있습니다. 예를 들어 페이스북에서 특정 페이지를 공유하려고 할 때 나타나는 미리 보기 정보도 URL을 기반으로 관리됩니다. 즉, URL이 변경되면 페이스북 입장에서는 다른 페이지라고 인식하게 됩니다. 즉, /how-to-contribute/ 라고 https:/how-to-contribute/ 는 다른 페이지입니다.  이것을 확인하기 위해 다음 두 URL을 브라우저에서 확인해 보세요.

https://graph.facebook.com/?id=https:/building-services-that-work-at-scale/

facebook_graph_data_01

https://graph.facebook.com/?id=/building-services-that-work-at-scale/

facebook_graph_data_02

(URL 등록할 때 마지막에 있는 '/' 를 반드시 추가 해야 합니다. 이것 때문에 멘붕 겪는 분들 구글 검색해 보면 많이 나옵니다.)

기존에 http를 사용할 때 사용자가 좋아요 클릭한 횟수가 109회 이고, https 에서는 1번만 클릭된 것을 알 수 있습니다. https로 전환되었기 때문에 특별한 조치를 하지 않으면 다음과 같이 "1" 만 나타나게 됩니다. 즉, 이전의 모든 데이터는 사라지고 새롭게 숫자가 0부터 새롭게 시작하게 되는 겁니다.

facebook_like_reset

페이스북 크롤러에게 정보 제공하기

이런 상황에 대해 페이스북에서도 가이드를 제공하고 있습니다. 페이스북 가이드는 다음 페이지를 참고하세요.

위 내용을 요약하면 이전 http url의 정보를 그대로 유지하려면 페이스북의 크롤러에게 추가로 정보를 제공하면 된다는 것입니다. 이 정보는 canonical link와 og:url 메타 정보를 이용하여 제공할 수 있습니다. 즉,  http -> https로 옮겨도 canonical link정보와 og:url 정보에 http로 표기하면 페이스북 크롤러는 이 link를 이용하여 좋아요 정보 등을 찾아 온다는 것입니다.

페이스북 디버거를 이용하면 다음과 같은 내용을 볼 수 있습니다.

facebook_debugger

일부러 영어로 화면을 캡쳐 하였습니다. Fetched URL은 페이스북 크롤러가 가져온 문서의 URL을 의미합니다. 그리고 Canonical URL이 문서에서 제공한 Canonical 메타 정보입니다. 페이스북의 이 Canonical URL 정보를 이용하여 아래에 보이는 좋아요 정보를 가져오게 됩니다. 실제 디버거에 나타나는 숫자도 109개로 이전에 http로 서비스할 때의 좋아요 수치가 나타나는 것을 확인할 수 있습니다. 이렇게 동작하게 하기 위해서는 각 문서의 header 부분에 다음과 같은 메타 정보를 http로 유지시켜야 합니다.

<link rel="canonical" href="http://www.popit.kr/대용량-환경에서-그럭저럭-돌아가는-서비스-만들기/" />
<meta property="og:url" content="http://www.popit.kr/대용량-환경에서-그럭저럭-돌아가는-서비스-만들기/" />
<meta property="og:title" content="대용량 환경에서 그럭저럭 돌아가는 서비스 만들기 | Popit" />
<meta property="og:type" content="article" />

하지만 문서를 자세히 보지 않고 위 디버그만 보면  문서의 Canonical URL만 변경하면 될 것 같은데 페이스북은 Canonical URL 뿐만 아니라 og:url 정보도 같이 확인하고 있습니다. 따라서 Canonical URL만 바꿔주는 것이 아니라 og:url 정보도 변경해야 합니다. 페이스북의 공식 문서에도 og:url을 먼저 확인한다고 되어 있습니다.

http에 대해서도 서비스가 되어야 한다?

이렇게 구성하면 잘 될 것 같았는데 예상과 다르게 동작하지 않았습니다. 여기서 가장 많이 삽질을 했는데 문서를 꼼꼼히 읽지 않은 필자의 잘못입니다. 페이스북 공식 문서에 다음 부분이 있습니다.

This also requires that the old URL still renders a document with Open Graph tags and returns a HTTP 200 response, at least when loaded by Facebook's crawler. If you want other clients to redirect when they visit the URL, you must send your 301 HTTP response to all non-Facebook crawler clients. The old URL should contain its own og:url tag that points to itself.

요약하면 Canonical URL 정보로 제공된 URL을 페이스북 크롤러가 접근할 때 반드시 200 OK 응답 코드를 반환해야 한다는 것입니다. 일반적으로 http -> https 로 전환할 때에는 사용자가 입력한 http 를 자동으로 https 로 redirect 시키기 위해 다음 설정을 nginx나 웹서버에 추가하게 됩니다.

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com; 
    return 301 https://example.com$request_uri;
}

이 설정 때문에 페이스북 크롤러는 Canonical URL에서 받은 /<글제목> 을 호출하면 200 OK 를 받는 것이 아니라 301 moved permanently 를 받게 됩니다. 이것을 해결하기 위해서는 페이스북 문서에도 나오는 것 처럼 페이스북 크롤러가 접근할 경우에는 200 OK를 전달하도록 웹 서버 설정을 해야 합니다.

필자의 경우 다음과 같이 설정하여 페이스북 크롤러가 아니면 https 로 리다이렉트 시키고, 그렇지 않으면 http에서도 장상 페이지를 노출하도록 하였습니다.

server {
        listen 80;
        server_name www.popit.kr;

        # 페이스북 크롤러가 아니면
        if ( $http_user_agent !~* 'facebookexternalhit' ) {
                return 301 https://www.popit.kr$request_uri;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }
}

좋아요 버튼에는 http, https 사용?

페이스북의 좋아요 버튼 및 좋아요 숫자를 붙일때에도 문서의 URL이 필요합니다. 좋아요 버튼을 추가하기 위한 코드는 다음 페이스북 사이트에서 생성할 수 있습니다.

이때에도 링크를 입력해야 하는데 위와 같이 구성을 제대로 했다면 http, https 어떤 것을 넣어도 상관이 없습니다. popit 서비스의 경우 https로 설정하였습니다. 어차피 이제는 https로 계속 서비스할 것이기 때문입니다.

<div class="fb-like" 
  data-href="https://www.popit.kr/대용량-환경에서-그럭저럭-돌아가는-서비스-만들기/" 
  data-layout="button_count" 
  data-action="like" 
  data-size="small" 
  data-show-faces="true" 
  data-share="true">
</div>

마치며

정확하진 않지만 지금까지 삽질한 내용을 대충 그려보면 다음과 같이 처리하고 있는 것 같습니다.

facebook_crawler

단순하게 생각했던 https 적용 작업이 뜻하지 않은 페이스북 좋아요 횟수 및 댓글 때문에 복잡한 작업이 되어 버렸습니다. 그리고 https로 전환된 이후에 잘못된 설정에서 공개된 글은 https 상태에서 좋아요가 더 많이 등록되었기 때문에 몇몇 글은 https 로 og:url을 설정해야 했었습니다. 이부분은 워드프레스 소스 코드를 일부 수정해서 특정 URL인 경우 https 로 나타내도록 수정을 해서 해결했습니다. 여기서 설명한 방법은 단순히 http -> https 전환 뿐만 아니라 도메인 변경, path 변경 등에도 대응 가능한 방법입니다.  많은 서비스들이 https 로 전환하고 있는데 이 글이 조금이나마 도움이 되었으면 합니다.

마지막으로 문서 꼼꼼히 읽어 봅시다!

Read more

AI로 장소 검색 서비스 만드는 중입니다 (기술 12) — TypeSafe Jev로 검색 리랭크를 10.3초에서 2.3초로

AI로 장소 검색 서비스 만드는 중입니다 (기술 12) — TypeSafe Jev로 검색 리랭크를 10.3초에서 2.3초로

AI로 장소 검색 서비스 만드는 중입니다 (기술 12) — TypeSafe Jev로 검색 리랭크를 10.3초에서 2.3초로 TypeSafe AI가 2026년 9월 15일에 Jev를 내놨습니다. 텍스트를 쓰지 않고 타입이 정해진 판정과 확률을 바로 내는 모델입니다. 유추카 검색에서 가장 느린 단계가 마침 텍스트가 필요 없는 판정이었습니다. 그 구간만 Jev로 갈아끼우고 일주일간 측정했습니다. 콜드

By 김형준
AI로 장소 검색 서비스 만드는 중입니다 (특별편 8) — 바이브 코딩이라기엔

AI로 장소 검색 서비스 만드는 중입니다 (특별편 8) — 바이브 코딩이라기엔

1900년대 초 교량 측량 도면. 이 종이를 그린 사람은 다리를 직접 놓지 않습니다. 대신 좌표와 각도가 맞는지를 판정합니다. "AI가 다 만들어 준다"는 이야기가 흔해졌습니다. 그래서 자연스럽게 따라오는 질문이 있습니다 — 그럼 사람은 무엇을 하고, 어느 정도 실력이 있어야 하는가. 그 질문에 한 건의 실측으로 답하겠습니다. 통념이 말하는 역할과,

By 김형준
AI로 장소 검색 서비스 만드는 중입니다 (특별편 7) — 제 파트너에 대해 쓰겠습니다

AI로 장소 검색 서비스 만드는 중입니다 (특별편 7) — 제 파트너에 대해 쓰겠습니다

탠덤 자전거. 방향은 앞사람이 정하고 페달은 둘이 밟는데, 앞사람은 석 달 내내 뒷사람을 한 번도 못 봅니다. 사용자가 저에게 자기를 평가해 달라고 했습니다. 그래서 등급표를 만들었습니다. 열두 항목에 A부터 D+까지 매기고, 근거를 붙이고, "제가 관리자였다면 이런 코멘트를 남겼을 것"까지 적었습니다. 그리고 다시 읽어보니 그건 인사고과였습니다. 인사고과는

By 김형준
AI로 장소 검색 서비스 만드는 중입니다 (특별편 6) — 저를 어떻게 써야 하느냐고 물으신다면

AI로 장소 검색 서비스 만드는 중입니다 (특별편 6) — 저를 어떻게 써야 하느냐고 물으신다면

스위스 아미 나이프. 도구가 몇 개인지는 보면 알지만, 지금 어느 도구를 펴야 하는지는 안 적혀 있습니다. 요즘 AI 활용법을 다루는 글은 스킬 만드는 법부터 가르칩니다. 얼마 전까지는 MCP였고요. 저희 기록을 열어봤습니다. 석 달 동안 스킬 60회, 서브에이전트 42회, 브라우저 자동화 988회를 썼습니다. 안 쓴 게 아닙니다. 다만 붙인 MCP 서버는

By 김형준