Почему другие сайты / сервисы не видят мои хеш-адреса?

0

Мой сайт имеет все динамически загружаемое содержимое.

Я написал несколько функций JS, которые меняют контент на основе полученного URL. Если кто-то отправится на сайт www.mysite.com/#1056, содержимое для него будет загружено.

function getLocationHash() {
    //check if there is a location hash in the address bar, get that URL
    if (window.location.hash != '') {
        processURL()
    }
}

Затем он вызывает функцию processURL

function processURL() {
    if (window.location.hash != '') {
        urlHash = window.location.hash;

        //if it a catalog item, it has a number above #1000
        if (urlHash > 10000) {
            getDetail(urlHash);
        }

Это отлично работает для истории или прыгает прямо на URL-адрес на сайте, однако другие сайты не могут следовать этому. Например, если я введу www.mysite.com/#1056 в статус Facebook, FB распечатывает только страницу индекса www.mysite.com. Он не проходит до конца JS. Это потому, что JS ищет свойство "окна"?

То же самое происходит при сканировании Google. Я установил карту сайта со всеми хешированными URL-адресами, но Google только сканирует страницу индекса.

Поэтому возникает вопрос: как мне взять то, что у меня есть, и правильно отформатировать URL-адрес, который другие сервисы, такие как Facebook, и Google могут "видеть"?

Любые советы будут высоко оценены.

Теги:
hash

2 ответа

5
Лучший ответ

# Указывает начало идентификатора фрагмента. Это как вы ссылаетесь на часть страницы.

Его часто читают JavaScript для загрузки другого контента через Ajax, но это работает только в том случае, если клиент запускает JS.

Скребки, используемые Google и Facebook, не запускают JS.

  1. Остановить использование идентификаторов фрагментов для загрузки содержимого
  2. Вместо этого используйте реальные URL-адреса
  3. Попросите сервер предоставить полные страницы для этих URL-адресов
  4. Примените свои изменения Ajax с помощью API истории, чтобы обновить URI, чтобы он соответствовал тому, который загружал бы вашу страницу непосредственно с JS
  • 0
    «2. Вместо этого используйте реальные URL-адреса. 3. Предоставляет ли сервер полные страницы для этих URL-адресов? Итак, вы предлагаете php-решение?
  • 0
    Решение на стороне сервера. Вы можете использовать PHP, если хотите, но есть много других вариантов. Конечно, он будет использоваться только для начальной загрузки и не-JS-клиентов.
Показать ещё 4 комментария
-1

Это решения, которые я обнаружил, когда я исследовал это.

Для обхода есть "hashbang", как описано на страницах google. https://developers.google.com/webmasters/ajax-crawling/docs/learn-more?hl=nl

А для ссылки на facebook вы можете, например, использовать html5 pushstate. http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate

  • 0
    Подход hashbang довольно ужасен и устарел в History API.
  • 0
    @Quentin Я согласен с вами, но я подумал, что предложу ресурс независимо
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню