안녕하세요, 오늘은 제가 최근에 진행한 작은 사이드 프로젝트 'sitemapr'에 대해서 소개해 볼까 합니다.
프로젝트를 시작한 계기
광고비를 쓰지 않고도 (줄이고도) 서비스를 효과적으로 노출시키고 싶었습니다. 여러 가지 방법이 있겠지만, 저는 SEO를 잘하는 것이 무엇보다 중요하다고 생각했습니다. SEO란 '검색엔진 최적화'라는 의미로 검색엔진(e.g. Google)이 웹사이트의 내용을 효과적으로 파악하도록 웹페이지를 구조화하는 작업을 의미합니다. 최적화를 수행하기 위한 다양한 방법이 있지만, 검색엔진에 우리 서비스 페이지를 잘 알리는 것이 우선이라고 생각했습니다. 보통 검색엔진은 각 사이트에서 제공하는 사이트맵을 활용해서 페이지를 색인합니다.
블로그를 운영하고 있다면 보통 블로그 서비스나 정적 웹사이트 제작도구에서 사이트맵을 제작 해줍니다. 하지만, 일반적인 서비스를 운영하고 있다면 사이트맵을 놓치게 되는 경우가 많습니다. 저희 회사에서도 마찬가지였습니다. 실제 수만 개의 페이지가 존재하나 구글이 색인하고 있는 페이지는 2000개 남짓이었습니다. '이 부분을 개선한다면, 광고가 아니더라도 사이트 유입을 굉장히 늘릴 수 있겠구나'라고 생각했습니다.
처음에는 라이브러리를 만들지 않고 간단한 스크립트를 작성하려고 했습니다. 하지만, 저와 비슷한 고민을 하시거나 관심이 있으실 분들이 계실 거라고 생각했고 이분들에게도 도움을 주고 싶었습니다. 이렇게 sitemapr
라는 라이브러리를 만들게 되었습니다.
프로젝트 요구사항
프로젝트의 요구사항은 아주 간단했습니다.
1. Path 파라미터와 Query 파라미터를 조합한 URL을 가진 사이트맵을 생성할 수 있어야 한다.
2. 한 개의 사이트맵이 처리할 수 있는 URL은 최대 50,000개이므로 URL이 50,000개가 넘어갈 경우 사이트맵 인덱스와 이와 연결된 복수 개의 사이트맵을 만들 수 있어야 한다.
이것 외적으로 yaml이나 json 지원, cli 지원, 데이터베이스 쿼리 작성 지원 등을 고려했으나, 빠른 개발을 위해 초기 버전에서는 제거하고 가기로 결정했습니다.
프로젝트 진행 과정
요구사항이 간단했던 덕분에 해당 라이브러리는 굉장히 빠르게 만들었습니다. 실제로 제작하는데 드는 시간은 약 3시간 정도밖에 걸리지 않았습니다.
기술적으로는 파이썬을 사용해서 제작했고, 라이브러리 안정성을 위해서 테스트 코드를 함께 작성했습니다. 패키지 매니저로 poetry를 사용했고 github actions를 통해 pyproject.toml의 버전이 변경되면 pypi로 자동 배포될 수 있도록 설정하였습니다. (라이브러리 배포와 관련된 내용은 기회가 되면 이후 블로그에서 한 번 다뤄보겠습니다.)
프로젝트 적용
해당 라이브러리를 만든 이후, 이를 이용하여 서비스 사이트맵을 등록하였습니다. 약 50,000개의 URL을 추가로 구글 서치 콘솔에 등록할 수 있었고 해당 페이지들이 색인되길 기다리고 있습니다. 실제 서치 콘솔을 통해서 검색으로 유입되는 숫자가 최근 유의미하게 상승한 것을 확인할 수 있었습니다.
향후 모든 페이지가 색인된다면, 훨씬 더 결과가 좋지 않을까 기대하고 있습니다. 좀 더 시간이 흐른 후에 댓글로 큰 변화가 있었는지 공유해 보겠습니다.
향후 계획
개인적으로 해당 라이브러리를 조금씩 더 발전시켜 나갈 계획이 있습니다. 현재 계획하고 있는 것들은 아래와 같습니다.
1. 버전 호환성 수정
최신 파이썬 버전인 3.11을 사용했는데, 이렇게 되면 해당 라이브러리를 이용 가능한 유저 수에 제한이 생깁니다. 최소 3.7 버전 이상의 파이썬을 가지면 모두 사용 가능하도록 할 계획입니다.
2. 데이터베이스 쿼리를 직접 명시해서 파라미터들을 구성할 수 있게 하기
현재는 별도의 스크립트에서 데이터베이스 호출하고 결괏값을 넣어서 사용하는데, 이를 자체적으로 지원하면 보다 편리하게 이용 가능합니다.
3. yaml 형식 지원 및 CLI 지원
파이썬을 활용해서 별도의 스크립트를 작성하지 않더라도 단순히 yaml 파일로 이를 구성할 수 있으면 보다 많은 사람들에게 라이브러리를 알릴 수 있습니다.
이 외에도 '사이트맵 chunk 방식을 변경'하거나 '매일 매일 추가되는 페이지들을 어떻게 좀 더 효율적으로 관리'할 수 있을지에 대해서 고민하고 있습니다. 관심이 있으신 여러분들은 이와 관련해서 피드백/제안을 주시면 감사한 마음으로 고려해 보겠습니다. 😀
라이브러리 사용 방법
마지막으로 해당 라이브러리를 사용하는 방법에 대해서 짧게 소개하고 글을 마칠까 합니다. 아래 예시를 보시고 좀 더 궁금한 사항이 있으시면 댓글이나 Github 이슈를 통해 문의주시면 감사하겠습니다. 🙏
- 라이브러리 설치
pip install sitemapr
- 예시 코드
from sitemapr import Page, Param, SiteMapr
# Define the pages of your site
pages = [
Page(
path="",
query_params=[
Param(name="page", values=["home", "about", "contact"]),
Param(name="sort", values=["asc", "desc"]),
],
),
Page(
path="/blog",
query_params=[
Param(name="page", values=["1", "2", "3"]),
Param(name="sort", values=["asc", "desc"]),
],
),
Page(
path="/blog/{id}",
path_params=[Param(name="id", values=["1", "2", "3"])],
),
]
# Initialize SiteMapr with your website's base URL and the defined pages
sitemapr = SiteMapr(base_url="https://example.com", pages=pages)
# Save the sitemap to the specified directory
sitemapr.save("/path/to/your/sitemap/directory")
이상 저의 사이드 프로젝트 sitemapr
에 대한 소개를 마치겠습니다. 읽어주셔서 감사합니다.
24.10.25 업데이트
해당 작업 이후, 확실히 SEO에서 효과가 있었습니다. (3월 이전과 이후의 차이)
추가로 팀원이 여러가지 SEO 작업을 한 결과 아주 큰 성과를 볼 수 있었습니다.
'개발 > 파이썬' 카테고리의 다른 글
Polars 시작하기 (소개 및 설치) - 자주쓰는 명령어로 배우는 Polars #1 (0) | 2024.10.12 |
---|---|
poetry와 github actions를 활용한 파이썬 라이브러리 배포 자동화 (2) | 2024.04.13 |
파이썬 asyncio로 생산자/소비자 (Producer/Consumer) 패턴 구현하기 (25) | 2024.03.02 |
vscode에서 파이썬 개발환경 세팅하기 (가상환경, 개발도구) (9) | 2024.02.03 |
파이썬 예제로 보는 직접 의존성과 간접 의존성 (2) | 2023.02.11 |