[Web] Path variable, Query String 그리고 SEO

sean·2023년 3월 19일
1

Web

목록 보기
19/22

Query String (URL Parameter)

개념


URL Parameter (Query String)은 위의 그림에서와 같이 URL에서 물음표 뒤에 따라오는 key=value 형식의 pair들을 말한다. URL Parameter를 여러 개 쓰고 싶다면 &를 써서 여러 개의 key=value pair들을 이어붙여주면 된다.

사용 용도

  • Tracking
    ?utm_medium=social, ?sessionid=123 or ?affiliateid=abc

  • Reordering
    ?sort=lowest-price, ?order=highest-rated or ?so=newest

  • Filtering
    ?type=widget, color=blue or price-range=20~50

  • Identifying
    ?product=small-blue-widget, ?categoryid=124 or itemid=24AU

  • Paginating
    ?page=2, ?p=2 or viewItems=10-30

  • Searching
    ?query=users-query, ?q=users-query or ?search=drop-down-option

  • Translating
    ?lang=fr or ?language=de

URL Parameters로 인한 SEO 이슈

1. Parameters Create Duplicate Content

URL Parameters가 바뀐다고 해도 페이지의 콘텐츠 자체는 크게 변하는 경우가 거의 없다. 콘텐츠들이 reordered된 버전의 페이지라고 해도 원래의 페이지와 크게 다르지 않다. (단지 reordering된 것일 뿐). 또, tracking tag나 session ID가 붙어있는 URL도 사실은 원본 페이지와 내용이 같다.

예를 들어서, 아래의 모든 URL들은 결국에 'Collection of widgets'를 반환할 뿐이다. (하지만 URL이 서로 다름...)

그래서 뭐가 문제냐 하면, 검색엔진들은 이런 모든 parameter based URL을 새로운 페이지로 인식한다는 점이다. 그래서 검색엔진들은 URL만 다른 중복된 여러개의 페이지를 보게 된다는 것이다.

이는 곧 'keyword cannibaliztion'으로 이어질 수 있고, 추가적인 URL parameter가 추가적인 실제적인 가치를 부여하지 않으므로 우리의 사이트 퀄리티에 대한 Google의 관점을 다운그레이드할 수 있다.

2. Parameters Waste Crawl Budget

중복된 파라미터의 페이지들을 크롤링하는 데에 크롤링 비용이 낭비되고, 우리의 사이트에서 SEO 관련 페이지를 인덱싱하는 기능이 줄어들고 서버 로드가 증가한다.

실제로 구글에서 이렇게 말하였다.

"너무 복잡한 URL, 특히 여러 매개 변수를 포함하는 URL은 사이트에서 동일하거나 유사한 내용을 가리키는 URL을 불필요하게 많이 생성하여 크롤러에게 문제를 일으킬 수 있습니다. 결과적으로 Googlebot은 필요한 것보다 훨씬 더 많은 대역폭을 사용하거나 사이트의 모든 콘텐츠를 완벽하게 인덱싱하지 못할 수 있습니다."

3. Parameters Split Page Ranking Signals

똑같은 페이지 내용에 대한 여러 개의 permutation을 가지고 있을 경우, 링크 및 소셜 공유가 다양한 버전으로 들어올 수 있다.

이는 'Ranking signals'를 흐리게 만든다. 만약 우리가 크롤러를 혼동한다면, search query에 대해 index를 지정할 경쟁 페이지 중 어느 페이지인지 알 수 없게 된다.

4. Parameters Make URLs Less Clickable

Parameter URL은 보기에 좋지 않고, 읽기에도 어렵다. 또한, 신뢰할 수 있는 사이트처럼 보이지 않는다. 따라서 클릭될 가능성이 적다.

이는 페이지 성능에도 영향을 미칠 것이다. CTR(Click-through Rate: 클릭률)이 랭킹에 영향을 끼칠 수 있을 뿐만 아니라 소셜 미디어, 이메일, 포럼 또는 다른 곳에 복사본을 붙여넣으면 전체 URL이 표시될 수 있는 곳에서는 less clickable하기 때문이다.

이것은 한 페이지의 amplification의 극히 일부만 영향을 미칠 수 있지만, 모든 트윗, 좋아요, 공유, 이메일, 링크 및 멘션은 도메인에 중요하다.

URL 가독성이 낮으면 브랜드 참여도가 저하될 수 있다.

SEO Solutions to Tame URL Parameters

1. Limit Parameter-Based URLs

  • 불필요한 Parameter 제거하기

  • Empty Value 방지하기

  • Key를 한 번만 사용하기
    아래 그림과 같이 multi-select option이 있는 경우, key를 여러 개 두는 것 보다 하나의 key에 통합하는 것이 더 좋다.

  • URL Parameter를 정해진 순서대로 나열하기
    동일한 URL Parameter가 재배열되면 검색 엔진에서 페이지가 동일한 것으로 해석된다.

어차피 중복된 콘텐츠 관점에서 URL Parameter 순서는 중요하지 않지만, 그 각각의 조합은 크롤 예산과 분할 순위 신호 측면에서 좋지 않다.

사용자가 파라미터를 선택한 방법에 관계없이 항상 일관된 순서로 매개 변수를 배치하는 스크립트를 작성하도록 하자. 예를 들어, translating parameter로 시작해서, identifying parameter, 그 다음엔 pagination parameter, 그리고 필터링 및 재정렬 또는 검색 파라미터, 마지막으로 tracking parameter를 배치해야한다.

rel="canonical" 링크 속성은 페이지가 다른 페이지와 동일하거나 유사한 내용을 가지고 있음을 말해준다. 이것은 검색 엔진이 Ranking signals를 표준으로 지정된 URL로 통합하도록 장려한다.

rel="canonical" 링크 속성은 URL Parameter들이 tracking, identifying, 또는 reordering 용도로 쓰였을 때 사용하면 좋은 전략이다.

하지만, URL Parameter들이 페이지네이션(pagination), 검색(searching), 번역(translating) 혹은 다른 어떠한 필터링 파라미터들이었을 경우엔 적합하지 않은 전략이다.

3. Meta Robots Noindex Tag

SEO 밸류를 추가하지 않는 parameter 기반 페이지에 대해 noindex 지시어를 설정하는 방법도 있다.
이 태그는 검색 엔진이 페이지를 인덱싱하지 못하도록 한다.

4. Robots.txt Disallow

Robots.txt는 검색엔진들이 우리의 사이트를 크롤링하기 전에 가장 먼저 보는 파일이다. 만약에 검색엔진들이 무언가가 disallowed된 것을 보면, 해당 링크에는 크롤러가 방문하지 않을 것이다.

이 파일을 사용하여 모든 매개 변수 기반 URL(Disallow: /*?*) 또는 인덱싱하지 않을 특정 쿼리 문자열에 대한 크롤러 액세스를 차단할 수 있다.

5. URL Parameter Tool in Google Search Console

Google의 URL Parameter Tool을 구성하여 parameter의 목적과 처리 방법을 크롤러에게 알려준다.

Google Search Console에는 이 도구를 사용하면 "검색에서 많은 페이지가 사라질 수 있다"는 경고 메시지가 있다.

불길하게 들릴 수도 있으나, 더 위협적인 것은 수천 개의 중복된 페이지가 우리의 웹사이트의 순위를 매기는 능력을 해친다는 것이다.

따라서 Google Search Console에서 URL Parameter를 구성하는 방법을 배우는 것이 Google 봇이 결정하도록 하는 것보다 가장 좋다!

[ 방법 ]

  • Tracking parameters don’t change page content. Configure them as “representative URLs”.

  • Configure parameters that reorder page content as “sorts”. If this is optionally added by the user, set crawl to “No URLs”. If a sort parameter it is applied by default, use “Only URLs with value”, entering the default value.

  • Configure parameters that filter page down to a subset of content as “narrows”. If these filters are not SEO relevant, set crawl to “No URLs”. If they are SEO relevant set to “Every URL”.

  • Configure parameters that show a certain piece or group of content as “specifies”. Ideally, this should be static URL. If not possible, you will likely want to set this to “Every URL”.

  • Configure parameters that display a translated version of the content as “translates”. Ideally, translation should be achieved via subfolders. If not possible, you will likely want to set this to “Every URL”.

  • Configuration parameters that display a component page of a longer sequence as “paginates”. If you have achieved efficient indexation with XML sitemaps, you can save crawl budget and set crawl to “No URL”. If not, set to “Every URL” to help crawlers to reach all of the items.

6. Move From Dynamic to Static URLs

많은 사람들은 URL Parameter를 처리하는 최적의 방법은 처음부터 그냥 아예 쓰지 않는 것이라고 생각한다. 그리고, 하위 폴더(subfolder)는 Google이 사이트 구조를 이해하는 데 parameter보다 훨씬 더 도움이 되며 정적인 키워드 기반 URL은 항상 페이지 SEO의 초석이 되었다.

이를 위해 Server-side URL rewrites를 사용해서 parameters를 하위 폴더 URL로 변환할 수 있다.

예를 들어,

www.example.com/view-product?id=482794

위의 URL은 아래와 같이 다시 쓰인다.

www.example.com/widgets/blue

이러한 방식은 카테고리, 제품 또는 검색 엔진 관련 속성에 대한 필터를 식별하는 것과 같은 descriptive keyword-based parameters에 적합하다. 또한, 번역된 콘텐츠에도 효과적이다.

그러나, 가격과 같은 non-keyword relevant elements of faceted navigation 같은 경우에는 문제가 된다. 이런 가격과 같은 필터들을 static하고 indexable한 URL로 만드는 것은 SEO 가치를 더하지 않는다.

또 중요한 것은, pagination, onsite search box results, 또는 sorting과 같은 것들에 대해서 dynamic parameter를 static URLs로 대체한다고 해서 이것이 crawl budget이나 internal link equity dilution 문제를 해결하지 않는다는 것이다.

그리고 facted navigation의 모든 필터 조합을 indexable URLs로 설정하면 thin content issues가 발생하는 경우가 많다. 특히, 다중 선택 필터를 제공하는 경우에는 더욱 그렇다.

많은 SEO 전문가들은 URL에 영향을 미치지 않고 동일한 사용자 경험을 제공할 수 있다고 주장한다. 예를 들어, 페이지 내용을 수정하기 위해 GET 요청 대신 POST를 사용하는 것이 가능하다. 따라서, 사용자 경험을 보존하고 SEO 문제를 방지한다.

하지만, 이러한 방법으로 URL parameters를 삭제하면 사용자들이 해당 페이지에 대한 링크를 북마크하거나, 공유할 수 없다. 그리고, pagination을 하기에는 이러한 방법이 최적의 방법이 아니고, parameter를 트래킹하기에도 최적의 방법이 될 수 없다.

문제의 핵심은 많은 웹사이트에서 이상적인 사용자 경험을 제공하려면 URL parameters를 피하는 것이 불가능하다는 것이다. 하지만 이것은 또 Best practice SEO도 아닐 것이다.

그럼 이제 우리는 알았다.
검색 결과(search results)에서 인덱싱하지 않으려는 파라미터들(paginating, reordering, tracking, etc) 등의 경우 Query String으로 구현한다. 반면, indexed 되길 원하는 파라미터들은 Static URL Paths를 사용하는 것을 권장한다!

Best Practice URL Parameter Handling for SEO

그래서 위의 여섯 가지 SEO 전략 중에 무엇을 선택해야 할까?
(일단 확실한 건 6가지 모두 다 고를 수는 없다. 왜냐하면 그렇게 하면 불필요한 복잡성을 추가하고, SEO 솔루션 서로는 actively conflict하기 때문이다.)

What becomes clear is there is no one perfect solution!

궁극적으로 우리의 웹사이트에 무엇이 적합한지는 우리의 우선순위에 따라 달라질 것이다.

해당 포스트의 저자는 개인적으로 'Noindex'나 parameter pages에 대한 액세스를 차단하는 방법은 사용하지 않는다고 밝혔다. 구글이 모든 URL 변수를 탐색하고 이해할 수 없다면 Ranking signals를 Canonical page에 통합할 수 없다.

저자는 SEO-friendly한 parameter handling의 방법으로 다음과 같은 방법들을 소개하였다.

  • 검색 엔진에 적합한 Static URL 파라미터를 이해하기 위해 키워드 서치를 수행한다.

  • rel="next" & rel="prev"를 사용하여 올바른 페이지네이션(correct pagination handling)을 구현한다.

  • 나머지 모든 parameter-based URLs에 대해서는 일관된 순서 규칙을 정해서 구현한다. (규칙: key를 한 번만 사용하고, empty value가 올 수 없도록 하기)

  • 적절한 parameter pages에 rel=canonical 링크 attribute를 추가하여 ranking ability를 결합한다.

  • 검색 엔진이 각 파라미터의 기능을 이해할 수 있도록 Google과 Bing 모두에 대해서 URL parameters를 failsafe하게 구성한다.

  • XML 사이트맵(sitemap)에서 parameter-based URLs가 제출되지 않았는지 다시 확인하자.


Reference

https://www.searchenginejournal.com/technical-seo/url-parameter-handling/#basics

profile
여러 프로젝트보다 하나라도 제대로, 깔끔하게.

0개의 댓글