Вот хорошее решение ... основанное на просмотре ваших описаний / диаграмм, а также обдумав это для предыдущих сайтов.
Два ключевых понятия, которые нужно запомнить ... а все остальное - все детали:
- Не показывать Google то, что не показывает обычным пользователям. Если вы сделаете что-нибудь хитрое, у вас могут возникнуть большие проблемы, и в любом случае это не обязательно.
- Используйте Прогрессивное улучшение , чтобы улучшить работу пользователей JavaScript
Это можно сделать так ...
На своей странице лирики создайте постоянную ссылку на каждое объяснение, подобное этому:
<a href="/lyrics/ARTIST/SONG?note=NOTEID" onclick="showPopUpExplanation(NOTEID);">lyric snippet here</a>
Обратите внимание, что мы используем QueryString (?) Вместо хеша (#) , чтобы Google (и пользователи с отключенной JS) воспринимали это как реальный, уникальный URL-адрес постоянной ссылки.
Теперь, используйте Progressive Enhancement и добавьте обработчики onclick
ко всем вашим .explanation-link
ссылкам (как показано выше или как @Dean предложил ), чтобы заставить всплывающие окна работать.
Вам вообще не нужно использовать # (хэш) ссылки для ваших пользователей JavaScript. Это необходимо только в том случае, если вы пытаетесь разрешить кнопке «Назад» браузера работать с AJAX, но, поскольку вы показываете всплывающее окно на странице (предположительно, с кнопкой «Закрыть»), это вовсе не обязательно.
Пользователи, которые хотят поделиться конкретным объяснением со своими друзьями, будут использовать ваш короткий (/NOTEID
) URL. Эти сокращенные URL-адреса должны быть перенаправлением 301 на вашу реальную постоянную ссылку (поэтому поисковые системы не индексируют оба URL-адреса).
Наконец, чтобы заставить работать постоянные ссылки, вы будете использовать небольшой сценарий на стороне сервера, чтобы при посещении этой страницы сразу же появлялось всплывающее окно . Сделайте что-то вроде этого:
<?php if (isset($_GET['note'])): ?>
<!-- place above the song lyrics; use CSS to style nicely for non-JS -->
<div id="explanation">
<?php printExplanation((int)$_GET['note']); ?>
</div>
<script type="text/javascript">
$('#explanation').hide(); // hide HTML explanation for JS users
showPopUpExplanationFromDiv($('#explanation'));
</script>
<?php endif; ?>
Важной частью здесь является то, что вы печатаете объяснение в HTML , а не в JavaScript / JSON, чтобы пользователи Google и не-JS могли его видеть, но постепенно улучшают его для пользователей JS.