검색해도 잘 못 찾아서 글을 남깁니다.

 

파라미터에 m=1 붙이지 않고 조절 가능한 방법이 있을까요?

 

request_uri 변경 없이 jquery/ajax or session/cookie 만으로 조절하고 싶습니다.

 

아마도 아래와 같은 형태로 코딩하고 싶습니다.

 

<a href="#" onclick="Cookies.set('쿠키', 'N'); location.reload(); return false;">PC버전</a>

 

또는

 

<a href="#" onclick="jQuery.exec_json('?.proc?SetMobile', {'쿠키':'N'}, function(p){ location.reload(); }); return false;">PC버전</a>

 

목적은, 검색엔진에서 m=1 (혹은 m=0) 타고 들어오는 바람에 Mobile 인데도 PC가 보이거나 그 반대의 상황이 나옵니다. 그래서 SEO 상에서 m 을 지우고자 합니다. (에미없군요.)

  • ?

    자문 자답:

    jQuery.exec_json('member.getMemberMenu', {'m':1}, function(p){ location.reload(); });

  • ?

    이미 ?m=1 로 붙여 들어온 경우 ?m=1 파라미터가 지워지지 않으므로

     

    jQuery.exec_json('member.getMemberMenu', {'m':1}, function(p){ if(current_url.getQuery('m').length) location.href = current_url.setQuery('m',null); else location.reload(); });
  • profile

    rx_uatype 쿠키를 지우고, URL에서도 m을 지우고

    둘 다 없는 상태로 새로고침하면 해당 기기에 맞는 상태로 나올 것 같은데요.


    XE.cookie.remove('rx_uatype', { path 등 몇 가지 맞춰줘야 함 });

    location.href = location.href.setQuery('m', null);

     

    반대로, PC, 모바일 중 특정한 한 가지 상태로 강제 전환하는 링크를 만드시려면

    location.href = location.href.setQuery('m', 1); // 또는 0

    이것만 해주셔도 상관없고요.

  • profile ?

    rx_uatype 쿠키를 지우고, URL에서도 m을 지우고
    둘 다 없는 상태로 새로고침하면 해당 기기에 맞는 상태로 나올 것 같은데요.
    -> 맞습니다, 그러나 모바일에서 PC화면으로 접속하길 원하면(혹은 반대의 경우) 잘 되지 않을 것입니다.

    강제 전환하는 링크를 만드시려면
    location.href = location.href.setQuery('m', 1); // 또는 0
    -> 주소에 ?m=1 남는 것은 제게 깨끗하지(?) 못 했습니다.

    결국 모바일 레이아웃 하단에 최종 코드는
    <a href="javascript:;" onclick="jQuery.exec_json('member.getMemberMenu', { 'm':'0' }, function(p){ if(current_url.getQuery('m').length ) location.href = current_url.setQuery('m',null); else location.reload(); }); return false;">PC버전</a>
    이렇게 해서 m 파라미터를 배제 합니다.
    아쉬운 점은, 모바일로 PC 접속한 경우 화면 하단에 ?m=0 뜨는건데 이것도 꼼수가 있겠지만 일단 "주로" 문제가 되는 것은 검색엔진에 ?m=1 링크가 우수수 달려있는거라 m=0 까지 처리하진 않았습니다. 좀 헷갈리게 쓰긴 했는데 m=1 이든 m=0 이든 검색엔진에 꽤 많이 있어서 이것도 다 없애버려야 겠군요 ``;;

    관심가지고 조언 주셔서 감사합니다.

  • ? profile
    네, URL에 m 파라미터가 남지 않도록 하려면 백그라운드에서 한 번 요청한 후 새로고침하거나, history.replaceState()를 사용해서 URL을 조작하는 방법밖에 없겠네요.
  • ?

    추가. after module proc 시점에 변태 코드 추가 ㅋㅋ

    <?php
    $oContext = Context::getInstance();
    $oContext->html_footer = preg_replace('@(<a class="xe_mobile") [^>]*>([\s\S]*?)</a>@us', '\1 href="javascript:;" onclick="'."jQuery.exec_json('member.getMemberMenu', { 'm':'1' }, function(p){ if(current_url.getQuery('m').length ) location.href = current_url.setQuery('m',null); else location.reload(); }); return false;".'">\2</a>', $oContext->html_footer);
  • ?

    참고로, 이 이슈는 pc/mobile 호스트가 동일할 때 발생하는군요.

    pc 호스트가 www.~.com 그리고 mobile 호스트가 m.~.com 이면 검색엔진에 ?m=1 ?m=0 나오지 않습니다.