pushState
콘텐츠를 읽기 위해 검색 엔진이 필요한 경우 나쁜 가요 ?
아니요, pushState
해시 뱅에 대해 동일한 일반적인 프로세스를 수행하지만 더보기 좋은 URL을 사용하여 설명합니다. hashbangs를 사용할 때 실제로 어떤 일이 발생하는지 생각해보십시오.
당신은 말한다 :
hashbangs를 사용하면 Google은 정적 콘텐츠를 얻기 위해 escaped_fragment URL로 이동하는 것을 알고 있습니다.
즉,
- 구글은 링크를 본다
example.com/#!/blog
- Google 요청
example.com/?_escaped_fragment_=/blog
- 당신은 사용자가 볼 수 콘텐츠의 스냅 샷을 반환
보시다시피 이미 서버에 의존합니다. 서버에서 콘텐츠의 스냅 샷을 제공하지 않는 경우 사이트가 제대로 인덱싱되지 않은 것입니다.
그렇다면 Google은 pushState로 무엇을 볼 수 있습니까?
pushState를 사용하면 javascript를 사용하여 json을로드 한 다음 템플릿을 만들 수 없으므로 Google은 아무것도 보지 못합니다.
실제로 Google은에서 요청할 수있는 모든 것을 볼 수 있습니다 site.com/blog
. URL은 여전히 서버의 리소스를 가리키며 클라이언트는 여전히이 계약을 따릅니다. 물론 현대 클라이언트의 경우 Javascript는 페이지를 새로 고치지 않고도 콘텐츠를 검색하고 상호 작용할 수있는 새로운 가능성을 열었 지만 계약은 동일합니다.
따라서의 의도 된 우아함은 pushState
이전 및 신규, JS 가능 여부에 관계없이 모든 사용자에게 동일한 콘텐츠를 제공하지만 새로운 사용자 는 향상된 경험을 얻을 수 있다는 것 입니다.
Google이 귀하의 콘텐츠를 보게하려면 어떻게해야합니까?
Facebook 접근 방식- 상태로 site.com/blog
푸시 할 때 클라이언트 앱이 변환 할 URL에서 동일한 콘텐츠를 제공합니다 /blog
. (페이스 북은 pushState
아직 내가 아는 것을 사용하지 않지만 해쉬 뱅으로 이것을합니다)
Twitter 접근 방식 — 들어오는 모든 URL을 해당하는 hashbang으로 리디렉션합니다. 즉, "/ 블로그"에 대한 링크가 /blog
상태로 푸시 됩니다. 그러나 직접 요청하면 브라우저는 #!/blog
. (Googlebot의 경우 _escaped_fragment_
원하는대로 라우팅됩니다 . 다른 클라이언트의 pushState
경우 예쁜 URL로 돌아갈 수 있습니다.)
그래서 당신은 _escaped_fragment_
능력 을 상실 pushState
합니까?
몇 가지 다른 의견에서
이스케이프 된 조각은 완전히 다릅니다. 순수한 테마가없는 콘텐츠, 캐시 된 콘텐츠를 제공 할 수 있으며 일반 페이지와 같은 부하를받지 않습니다.
이상적인 솔루션은 Google이 JavaScript 사이트를 수행하거나 pushstate 사이트 (robots.txt?)에 대해서도 이스케이프 된 조각 URL이 있음을 알 수있는 방법을 구현하는 것입니다.
귀하가 언급 한 이점은 _escaped_fragment_
. 당신을 위해 재 작성하고 특별히 명명 된 GET
매개 변수를 사용한다는 것은 실제로 구현 세부 사항입니다. 다른 말로 다시 - 당신은 표준 URL을 할 수 없다는 것이 정말 특별한 것은 없습니다 /blog
에 /?content=/blog
자신의 사용에 mod_rewrite를 또는 서버의 상당.
서버 측 콘텐츠를 전혀 제공하지 않으면 어떻게됩니까?
URL을 다시 작성하고 어떤 종류의 콘텐츠 를 제공 할 수없는 경우 /blog
(또는 브라우저에 푸시 한 상태) 서버는 실제로 더 이상 HTTP 계약을 따르지 않습니다.
어떤 이유로 든 페이지를 다시로드하면이 URL에서 콘텐츠를 가져 오므로 이는 중요합니다. ( https://wiki.mozilla.org/Firefox_3.6/PushState_Security_Review 참조 — "푸시 된 경우 소스보기 및 다시로드는 모두 새 URI에서 콘텐츠를 가져옵니다.")
클라이언트 측에서 사용자 인터페이스를 한 번 그리고 JS API를 통해 콘텐츠를로드하는 것이 나쁜 목표가 아니라 HTTP 및 URL로 실제로 설명되지 않고 기본적으로 이전 버전과 호환되지 않는다는 것입니다.
현재 이것은 해시 뱅이 의도 한 정확한 것입니다. 서버가 아닌 클라이언트에서 탐색되는 별개의 페이지 상태를 나타냅니다. 예를 들어 다시로드 하면 해시 된 값을 읽고, 구문 분석하고, 처리 할 수 있는 동일한 리소스 가로드됩니다 .
단지 그들이 것으로 될 일이 또한 사용 된 페이지 새로 고침없이 서버 측 위치에 역사를 변경 (특히 페이스 북과 트위터에 의해). 사람들이 pushState에 대한 hashbangs를 포기하도록 권장하는 것은 이러한 사용 사례입니다.
모든 콘텐츠를 클라이언트 측에서 렌더링하는 경우 pushState
해시 뱅을 사용하는 방법이 아니라보다 편리한 히스토리 API의 일부로 생각해야합니다 .