Анализ сайта brouter.m11n.de
Основное Готовность: 100%
Домен
brouter.m11n.de
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Используйте для продвижения только домен второго уровня.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Цепочка редиректов:
http://brouter.m11n.de
302 Found
https://brouter.m11n.de/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 02.11.2026 14:32:27.
Включён HSTS (Strict-Transport-Security) — защита от подмены на http.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
utf-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице utf-8.
Язык
de
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: de.
Скорость загрузки
~0,50сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,50сек оптимальна.
Объем документа
90Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 90Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 7
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 7 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | ./assets/leaflet-bWwJ8D-O.css | |
| stylesheet | ./assets/vendor_misc-BEpCY1ME.css | |
| stylesheet | ./assets/maplibre_gl-BYUn0KvE.css | |
| stylesheet | ./assets/main-BGGMxmyJ.css | |
| js | https://stats.m11n.de/js/app-bundle.js | |
| js | module | ./assets/main-CmQ0m4yA.js |
| js | ./assets/polyfills-legacy-YWqjHKDK.js |
Серверные заголовки
Кол-во: 12
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 12шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Server | nginx |
| Date | Thu, 20 Aug 2026 15:24:27 GMT |
| Vary | Accept-Encoding |
| ETag | "6a846541-16a4f" |
| Accept-Ranges | bytes |
| Strict-Transport-Security | max-age=31536000; includeSubDomains |
| Referrer-Policy | strict-origin-when-cross-origin |
| X-Frame-Options | SAMEORIGIN |
| X-XSS-Protection | 1; mode=block |
| X-Content-Type-Options | nosniff |
| Content-Security-Policy | script-src 'self' 'unsafe-inline' 'unsafe-eval' *.m11n.de data:; worker-src 'self' blob:; style-src * 'unsafe-inline'; img-src * data:; default-src *; |
| permissions-policy | fullscreen=(self), geolocation=(self), web-share=(self) |
CMS
Не определена
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
CMS не определена. Вероятно, сайт самописный либо движок надёжно скрыт. Это не ошибка.
Веб-сервер
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
Сайт работает на веб-сервере nginx.
Мета-теги Готовность: 23%
Title
bikerouter.de
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо увеличить число символов в title (текущее значение мало: 13, минимум: 25, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm.
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Необходимо уменьшить число символов в description (текущее значение: 151, оптимально: от 120 до 130)
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
https://bikerouter.de/
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Домен в каноническом Url не совпадает!
Robots
index,follow
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots со значениями index, follow не накладывает ограничений на индексирование и показ контента.
Адаптивность
width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Meta-тег viewport со значением user-scalable определяет доступность масштабирования страницы пользователем.
Meta-тег viewport со значением maximum-scale определяет максимальный масштаб области просмотра.
Разметка OpenGraph
Кол-во: 6
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph задана. Страница оптимизирована под социальные сети.
Показать полный список og мета-тегов
| Тип | Значение |
|---|---|
| og:type | website |
| og:url | https://bikerouter.de |
| og:title | bikerouter.de |
| og:description | ▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm. |
| og:image | ./images/bikerouter-share.png |
| og:site_name | bikerouter.de |
Все мета-теги
Кол-во: 13
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 13шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no |
| name | description | ▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm. |
| name | robots | index,follow |
| name | twitter:card | summary_large_image |
| name | twitter:title | bikerouter.de |
| name | twitter:description | ▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm. |
| name | twitter:image | ./images/bikerouter-share.png |
| property | og:type | website |
| property | og:url | https://bikerouter.de |
| property | og:title | bikerouter.de |
| property | og:description | ▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm. |
| property | og:image | ./images/bikerouter-share.png |
| property | og:site_name | bikerouter.de |
Оптимизация Готовность: 50%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют по одному на документ).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Слова из title 1 встречаются в тексте редко. Добавьте в контент страницы слова из тега <title>!
Абзацев с текстом 38 достаточно.
Среднее число слов в абзаце 17 достаточно.
Кол-во знаков контента 7889 на странице оптимально.
Кол-во слов 1304 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h2> 5. Это хорошо.
Тошнота
4,24
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 3. Измените текст страницы!
Академич. тошнота
14,95%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота страницы в пределах нормы.
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| import | 18 | 1,38% |
| routing | 11 | 0,84% |
| bikerouter | 11 | 0,84% |
| profiles | 9 | 0,69% |
| custom | 9 | 0,69% |
| settings | 8 | 0,61% |
| layers | 8 | 0,61% |
| profile | 7 | 0,54% |
| export | 7 | 0,54% |
| routes | 6 | 0,46% |
| tracks | 6 | 0,46% |
| waypoints | 6 | 0,46% |
| openstreetmap | 6 | 0,46% |
| alternative | 5 | 0,38% |
| download | 5 | 0,38% |
| selected | 4 | 0,31% |
| shortcut | 4 | 0,31% |
| geojson | 4 | 0,31% |
| elevation | 4 | 0,31% |
| ascend | 4 | 0,31% |
Индексация Готовность: 30%
Индексирование
Ошибок нет
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 32 оптимально. Поисковые роботы обязательно проиндексируют сайт.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 92660 байт. Загружен за: 0сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://brouter.m11n.de/robots.txt
302 Found
https://brouter.m11n.de/
200 OK
Показать содержимое robots.txt
<!doctype html><html lang="de"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/><title>bikerouter.de</title><meta name="description" content="▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm."/><link rel="canonical" href="https://bikerouter.de/"/><meta name="robots" content="index,follow"/><link rel="alternate" href="https://bikerouter.de/?lng=de" hreflang="de"/><link rel="alternate" href="https://bikerouter.de/" hreflang="x-default"/><link rel="alternate" href="https://bikerouter.de/?lng=en" hreflang="en"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "bikerouter.de",
"url": "https://bikerouter.de",
"publisher": {
"@type": "Person",
"name": "Marcus Jaschen",
"logo": {
"@type": "ImageObject",
"url": "https://www.marcusjaschen.de/icons/apple-touch-icon.png"
}
},
"author": [
{
"@type": "Person",
"name": "Marcus Jaschen"
},
{
"@type": "Person",
"name": "Norbert Renner"
}
],
"description": "▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm."
}</script><meta property="og:type" content="website"/><meta property="og:url" content="https://bikerouter.de"/><meta property="og:title" content="bikerouter.de"/><meta property="og:description" content="▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm."/><meta property="og:image" content="./images/bikerouter-share.png"/><meta property="og:site_name" content="bikerouter.de"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="bikerouter.de"/><meta name="twitter:description" content="▶ Der wahrscheinlich beste Fahrrad-Routenplaner der Welt! Kostenlos und datenschutzfreundlich. Gravel, Rennrad, MTB, City, Long Distance, Trekking uvm."/><meta name="twitter:image" content="./images/bikerouter-share.png"/><link rel="icon" href="./images/favicon.ico" sizes="32x32"/><link rel="icon" href="./images/icon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="./images/apple-touch-icon.png"/><script defer="defer" data-api="https://stats.m11n.de/api/live-updates" data-domain="bikerouter.de" src="https://stats.m11n.de/js/app-bundle.js"></script><script>window.plausible =
window.plausible ||
function () {
(window.plausible.q = window.plausible.q || []).push(arguments);
};</script><script type="module" crossorigin src="./assets/main-CmQ0m4yA.js"></script><link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-C0FnF6B9.js"><link rel="modulepreload" crossorigin href="./assets/leaflet-CpW7VAgU.js"><link rel="modulepreload" crossorigin href="./assets/turf-S0renstK.js"><link rel="modulepreload" crossorigin href="./assets/vendor_misc-D-xa9VmA.js"><link rel="modulepreload" crossorigin href="./assets/maplibre_gl-1of7Siju.js"><link rel="stylesheet" crossorigin href="./assets/leaflet-bWwJ8D-O.css"><link rel="stylesheet" crossorigin href="./assets/vendor_misc-BEpCY1ME.css"><link rel="stylesheet" crossorigin href="./assets/maplibre_gl-BYUn0KvE.css"><link rel="stylesheet" crossorigin href="./assets/main-BGGMxmyJ.css"><script type="module">import'data:text/javascript,if(!import.meta.resolve)throw Error("import.meta.resolve not supported")';import.meta.url;import("_").catch(()=>1);(async function*(){})().next();window.__vite_is_modern_browser=true</script><script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script></head><body class="d-flex flex-column"><nav class="navbar navbar-expand-md navbar-dark bg-bikerouter flex-nowrap"><button id="nav-button-menu" type="button" class="btn text-white" aria-label="Toggle menu"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"/></svg></button><form class="d-flex flex-wrap align-items-center" id="profile-form"><div id="profile-form-group" class="form-group"><label for="profile" class="visually-hidden">Profile</label> <select class="form-control" id="profile" data-i18n="[title]navbar.profile_label" title="Profile"><option data-i18n="navbar.profile.custom">Custom</option></select></div><div id="profile-alternatives-form-group" class="form-group md-2"><label for="alternative" class="visually-hidden">Alternative</label> <select class="form-control" id="alternative" data-i18n="[title]navbar.alternative-label" title="Alternative"><option disabled="disabled" data-i18n="navbar.alternative.option.info" value="">Calculate alternative routes:</option><option data-i18n="navbar.alternative.option.original" value="0" selected="selected">Original</option><option data-i18n="navbar.alternative.option.first" value="1">1st alternative</option><option data-i18n="navbar.alternative.option.second" value="2">2nd alternative</option><option data-i18n="navbar.alternative.option.third" value="3">3rd alternative</option></select></div></form><a id="navbar-brand-about" class="navbar-brand order-md-last d-md-none d-lg-block" href="#"><picture><source media="(max-width: 767px)" srcset="images/bikerouter-logo-white.png, images/bikerouter-logo-white@2x.png 2x"/><img src="./images/bikerouter-logo-black.png" srcset="images/bikerouter-logo-black.png, images/bikerouter-logo-black@2x.png 2x" alt="Bikerouter Logo"/></picture></a><div class="collapse navbar-collapse py-2 py-md-0" id="collapsingNavbar"><div class="navbar-nav align-items-md-center"><div class="nav-item"><button type="button" class="nav-link" id="exportButton" aria-haspopup="true" aria-expanded="false" data-i18n="[title]keyboard.generic-shortcut" data-i18n-options='{ "action": "$t(navbar.export-tooltip)", "key": "X" }' title="Export route"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="d-md-none d-lg-inline" width="16"><path d="M8.75 2.75a.75.75 0 0 0-1.5 0v5.69L5.03 6.22a.75.75 0 0 0-1.06 1.06l3.5 3.5a.75.75 0 0 0 1.06 0l3.5-3.5a.75.75 0 0 0-1.06-1.06L8.75 8.44V2.75Z"/><path d="M3.5 9.75a.75.75 0 0 0-1.5 0v1.5A2.75 2.75 0 0 0 4.75 14h6.5A2.75 2.75 0 0 0 14 11.25v-1.5a.75.75 0 0 0-1.5 0v1.5c0 .69-.56 1.25-1.25 1.25h-6.5c-.69 0-1.25-.56-1.25-1.25v-1.5Z"/></svg> <span data-i18n="navbar.export">Export</span></button></div><div class="nav-item"><button type="button" class="nav-link" id="shareButton" aria-haspopup="true" aria-expanded="false" data-i18n="[title]keyboard.generic-shortcut" data-i18n-options='{ "action": "$t(navbar.share-tooltip)", "key": "A" }' title="Share Route"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="d-md-none d-lg-inline" width="16"><path d="M12 6a2 2 0 1 0-1.994-1.842L5.323 6.5a2 2 0 1 0 0 3l4.683 2.342a2 2 0 1 0 .67-1.342L5.995 8.158a2.03 2.03 0 0 0 0-.316L10.677 5.5c.353.311.816.5 1.323.5Z"/></svg> <span data-i18n="navbar.share">Share</span></button></div><div class="nav-item"><button type="button" class="nav-link" id="routeManagerNavButton" title="Route Manager"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="d-md-none d-lg-inline" width="16"><path d="M3 3.5A1.5 1.5 0 0 1 4.5 2h1.879a1.5 1.5 0 0 1 1.06.44l1.122 1.12A1.5 1.5 0 0 0 9.62 4H11.5A1.5 1.5 0 0 1 13 5.5v1H3v-3ZM3.081 8a1.5 1.5 0 0 0-1.423 1.974l1 3A1.5 1.5 0 0 0 4.081 14h7.838a1.5 1.5 0 0 0 1.423-1.026l1-3A1.5 1.5 0 0 0 12.919 8H3.081Z"/></svg> <span data-i18n="navbar.routes">Routes</span></button></div><div class="nav-item dropdown"><button type="button" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="navbarLoadDropdown" aria-haspopup="true" aria-expanded="false" data-i18n="[title]navbar.load.tooltip" data-i18n-options='{
"tracksAction": "$t(navbar.load.tracks)",
"tracksKey": "O",
"nogosAction": "$t(navbar.load.nogos)",
"nogosKey": "$t(keyboard.shift)+N"
}' title="Load route"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="d-md-none d-lg-inline" width="16"><path d="M7.25 10.25a.75.75 0 0 0 1.5 0V4.56l2.22 2.22a.75.75 0 1 0 1.06-1.06l-3.5-3.5a.75.75 0 0 0-1.06 0l-3.5 3.5a.75.75 0 0 0 1.06 1.06l2.22-2.22v5.69Z"/><path d="M3.5 9.75a.75.75 0 0 0-1.5 0v1.5A2.75 2.75 0 0 0 4.75 14h6.5A2.75 2.75 0 0 0 14 11.25v-1.5a.75.75 0 0 0-1.5 0v1.5c0 .69-.56 1.25-1.25 1.25h-6.5c-.69 0-1.25-.56-1.25-1.25v-1.5Z"/></svg> <span data-i18n="navbar.load.title">Import</span></button><div class="dropdown-menu bikerouter-dropdown-menu bikerouter-dropdown-menu--navbar" aria-labelledby="navbarLoadDropdown"><button class="dropdown-item bikerouter-dropdown-item d-inline-flex justify-content-between" id="navbarLoadTracks"><span data-i18n="navbar.load.tracks">Import tracks</span> <span class="keys-wrapper keys-small"><kbd class="dimmed">O</kbd></span></button> <button id="nav-load-nogos" class="dropdown-item bikerouter-dropdown-item d-inline-flex justify-content-between"><span data-i18n="navbar.load.nogos">No-go areas</span> <span class="keys-wrapper keys-small"><kbd class="dimmed">Shift</kbd><kbd class="dimmed">N</kbd></span></button></div></div><div class="nav-item" data-i18n="[title]keyboard.generic-shortcut" data-i18n-options='{ "action": "$t(about.tooltip)", "key": "H" }' title="Show more information about Bikerouter"><button id="nav-button-about" type="button" class="nav-link"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="d-md-none d-lg-inline" width="16"><path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd"/></svg> <span data-i18n="navbar.about">About/Help</span></button></div><div class="nav-item nav-item__hall-of-fame" title="Bikerouter Unterstützer"><a class="nav-link" target="_blank" href="https://bikerouter.de/supporters/"><span class="fa fa-lg fa-heart-o" aria-hidden="true"></span><span data-i18n="navbar.supporters">Hall of Fame</span></a></div><div class="nav-item nav-item__support" title="Support Bikerouter"><a class="nav-link" target="_blank" href="https://bikerouter.de/supporters/"><span data-i18n="navbar.support" class="bikerouter-support">Support ❤️</span></a></div></div></div></nav><div class="sidebar-main d-none"><header><div class="d-flex justify-content-between align-items-center"><div class="sidebar-header-buttons d-flex flex-row align-items-center"><button id="sidebar-button-about" class="app-button app-button--info app-button--small"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="info-icon"><path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd"/></svg> <span data-i18n="sidebar.button.about">About</span></button> <button id="sidebar-button-whats-new" class="app-button app-button--info app-button--small"><span data-i18n="sidebar.button.whats-new">What's new?</span></button> <button id="sidebar-button-settings" class="app-button app-button--info app-button--small"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="info-icon"><path fill-rule="evenodd" d="M4.5 1.938a.75.75 0 0 1 1.025.274l.652 1.131c.351-.138.71-.233 1.073-.288V1.75a.75.75 0 0 1 1.5 0v1.306a5.03 5.03 0 0 1 1.072.288l.654-1.132a.75.75 0 1 1 1.298.75l-.652 1.13c.286.23.55.492.785.786l1.13-.653a.75.75 0 1 1 .75 1.3l-1.13.652c.137.351.233.71.288 1.073h1.305a.75.75 0 0 1 0 1.5h-1.306a5.032 5.032 0 0 1-.288 1.072l1.132.654a.75.75 0 0 1-.75 1.298l-1.13-.652c-.23.286-.492.55-.786.785l.652 1.13a.75.75 0 0 1-1.298.75l-.653-1.13c-.351.137-.71.233-1.073.288v1.305a.75.75 0 0 1-1.5 0v-1.306a5.032 5.032 0 0 1-1.072-.288l-.653 1.132a.75.75 0 0 1-1.3-.75l.653-1.13a4.966 4.966 0 0 1-.785-.786l-1.13.652a.75.75 0 0 1-.75-1.298l1.13-.653a4.965 4.965 0 0 1-.288-1.073H1.75a.75.75 0 0 1 0-1.5h1.306a5.03 5.03 0 0 1 .288-1.072l-1.132-.653a.75.75 0 0 1 .75-1.3l1.13.653c.23-.286.492-.55.786-.785l-.653-1.13A.75.75 0 0 1 4.5 1.937Zm1.14 3.476a3.501 3.501 0 0 0 0 5.172L7.135 8 5.641 5.414ZM8.434 8.75 6.94 11.336a3.491 3.491 0 0 0 2.81-.305 3.49 3.49 0 0 0 1.669-2.281H8.433Zm2.987-1.5H8.433L6.94 4.664a3.501 3.501 0 0 1 4.48 2.586Z" clip-rule="evenodd"/></svg> <span data-i18n="sidebar.button.settings">Settings</span></button></div><button class="btn-close" title="Hide Sidebar"></button></div></header><div class="sidebar-main-content d-flex flex-column flex-nowrap"><div class="sidebar-main-group"><div class="sidebar-main-card"><h4 class="title d-flex justify-content-between align-items-center" data-bikerouter-toggle-target="#sidebar-card-profile-hints, #sidebar-card-alternative-hints"><span data-i18n="sidebar.card.profile.title">I want to ride:</span> <span class="info"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="info-icon"><path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd"/></svg></span></h4><div class="sidebar-main-card-buttons mb-4 d-flex flex-row flex-wrap align-items-center"><button type="button" class="js__profile-shortcut-button app-button app-button--primary" data-profile="Fastbike-lowtraffic-tertiaries" data-i18n="[title]sidebar.card.profile.button.roadbike;sidebar.card.profile.button.roadbike" title="Road Bike Profile">Road</button> <button type="button" class="js__profile-shortcut-button app-button app-button--primary" data-profile="quaelnix-gravel" data-i18n="[title]sidebar.card.profile.button.gravel;sidebar.card.profile.button.gravel" title="Gravel Profile">Gravel</button> <button type="button" class="js__profile-shortcut-button app-button app-button--primary" data-profile="trekking" data-i18n="[title]sidebar.card.profile.button.trekking;sidebar.card.profile.button.trekking" title="Trekking Profile">Trekking</button> <button type="button" class="js__profile-shortcut-button app-button app-button--primary" data-profile="mtb-zossebart" data-i18n="[title]sidebar.card.profile.button.mtb;sidebar.card.profile.button.mtb" title="MTB Profile">MTB</button> <button type="button" class="js__profile-shortcut-button app-button app-button--primary" data-profile="shortest" data-i18n="[title]sidebar.card.profile.button.shortest;sidebar.card.profile.button.shortest" title="Shortest Route">Shortest</button> <button type="button" class="js__profile-shortcut-button app-button app-button--primary" data-profile="safety" data-i18n="[title]sidebar.card.profile.button.safest;sidebar.card.profile.button.safest" title="Safest Route">Safest</button></div><div id="profile-shortcuts-popular-container" class="mb-4 d-flex flex-column flex-nowrap"><div id="profile-shortcuts-popular-label" class="sidebar-main-card-label mb-1" data-i18n="sidebar.card.profile.label-popular">Most used:</div><div id="profile-shortcuts-popular" class="sidebar-main-card-buttons-small d-flex flex-row flex-wrap align-items-center"></div></div><div class="sidebar-main-card-label mb-1" data-i18n="sidebar.card.profile.label-more">More Routing Profiles:</div><div id="sidebar-profile-form-container"></div><div id="sidebar-card-profile-hints" class="d-none"><p class="mt-4 small" data-i18n="sidebar.card.profile.help1">The most popular routing profiles can be selected with a single click on the buttons.</p><p class="small" data-i18n="sidebar.card.profile.help2">If you don’t like those, you can choose from many different routing profiles in the selection field – so you’ll definitely find the right route for your riding style.</p><p class="small" data-i18n="sidebar.card.profile.help3">Tip: Just try out the different routing profiles on familiar routes to quickly see which one suits you best.</p></div><hr/><h4 class="title d-flex justify-content-between align-items-center"><span data-i18n="sidebar.card.alternative.title">Show me an alternative route:</span></h4><div class="d-flex flex-row flex-nowrap justify-content-between align-items-center"><button type="button" class="js__route-alternative-button app-button app-button--alternative" data-alternative="0" data-i18n="[title]sidebar.card.alternative.original.title;sidebar.card.alternative.original.label" title="Original Route Calculation (Shift-0)">Original</button> <button type="button" class="js__route-alternative-button app-button app-button--alternative" data-alternative="1" data-i18n="[title]sidebar.card.alternative.alternative-1.title;sidebar.card.alternative.alternative-1.label" title="Alternative Route Calculation 1 (Shift-1)">1</button> <button type="button" class="js__route-alternative-button app-button app-button--alternative" data-alternative="2" data-i18n="[title]navbar.button-route-alternative.alternative-2" title="Alternative Route Calculation 2 (Shift-2)">2</button> <button type="button" class="js__route-alternative-button app-button app-button--alternative" data-alternative="3" data-i18n="[title]navbar.button-route-alternative.alternative-3" title="Alternative Route Calculation 3 (Shift-3)">3</button></div><div id="sidebar-card-alternative-hints" class="d-none"><p class="small mt-4" data-i18n="sidebar.card.alternative.help1">We calculate up to three alternative routes between the waypoints for you. This works best if you set fewer waypoints.</p><p class="small">Shortcuts:<br/><kbd>Shift</kbd> <kbd>0</kbd><br/><kbd>Shift</kbd> <kbd>1</kbd><br/><kbd>Shift</kbd> <kbd>2</kbd><br/><kbd>Shift</kbd> <kbd>3</kbd></p></div></div></div><div class="sidebar-main-group"><div class="sidebar-main-card"><h4 class="title d-flex justify-content-between align-items-center" data-bikerouter-toggle-target="#sidebar-card-export-hints"><span data-i18n="sidebar.card.export.title">Manage and download your routes</span> <span class="info"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="info-icon"><path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd"/></svg></span></h4><div class="sidebar-main-card-buttons d-flex flex-row flex-wrap align-items-center"><button type="button" id="sidebar-route-management-button" class="js__route-management-button app-button app-button--success" data-i18n="[title]sidebar.card.export.button.manager.title"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="icon-button"><path d="M3 3.5A1.5 1.5 0 0 1 4.5 2h1.879a1.5 1.5 0 0 1 1.06.44l1.122 1.12A1.5 1.5 0 0 0 9.62 4H11.5A1.5 1.5 0 0 1 13 5.5v1H3v-3ZM3.081 8a1.5 1.5 0 0 0-1.423 1.974l1 3A1.5 1.5 0 0 0 4.081 14h7.838a1.5 1.5 0 0 0 1.423-1.026l1-3A1.5 1.5 0 0 0 12.919 8H3.081Z"/></svg> <span data-i18n="sidebar.card.export.button.manager.label">Saved Routes</span></button> <button type="button" id="sidebar-route-download-button" class="js__route-download-button app-button app-button--success" data-i18n="[title]sidebar.card.export.button.download.title"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="icon-button"><path d="M8.75 2.75a.75.75 0 0 0-1.5 0v5.69L5.03 6.22a.75.75 0 0 0-1.06 1.06l3.5 3.5a.75.75 0 0 0 1.06 0l3.5-3.5a.75.75 0 0 0-1.06-1.06L8.75 8.44V2.75Z"/><path d="M3.5 9.75a.75.75 0 0 0-1.5 0v1.5A2.75 2.75 0 0 0 4.75 14h6.5A2.75 2.75 0 0 0 14 11.25v-1.5a.75.75 0 0 0-1.5 0v1.5c0 .69-.56 1.25-1.25 1.25h-6.5c-.69 0-1.25-.56-1.25-1.25v-1.5Z"/></svg> <span data-i18n="sidebar.card.export.button.download.label">Download</span></button> <button type="button" id="sidebar-route-share-button" class="js__route-share-button app-button app-button--success" data-i18n="[title]sidebar.card.export.button.share.title"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="icon-button"><path d="M12 6a2 2 0 1 0-1.994-1.842L5.323 6.5a2 2 0 1 0 0 3l4.683 2.342a2 2 0 1 0 .67-1.342L5.995 8.158a2.03 2.03 0 0 0 0-.316L10.677 5.5c.353.311.816.5 1.323.5Z"/></svg> <span data-i18n="sidebar.card.export.button.share.label">Share</span></button></div><div id="sidebar-card-export-hints" class="d-none"><p class="mt-4 small" data-i18n="[html]sidebar.card.export.help1">Download your route for navigation, for example as a GPX file (Shortcut <kbd>X</kbd>).</p><p class="small" data-i18n="[html]sidebar.card.export.help2">Just share the route link or save it in your bookmarks (Shortcut <kbd>A</kbd>).</p></div></div></div><div class="sidebar-main-group"><div class="sidebar-main-card"><h4 class="title d-flex justify-content-between align-items-center" data-i18n="sidebar.card.support.title">Support Bikerouter</h4><div class="sidebar-main-card-buttons d-flex flex-row flex-wrap align-items-center"><a href="https://bikerouter.de/supporters/" target="_blank" class="app-button app-button--support" data-i18n="[title]sidebar.card.support.button.hall-of-fame.title;sidebar.card.support.button.hall-of-fame.label">Hall of Fame </a><a href="https://bikerouter.de/supporters/" target="_blank" class="app-button app-button--support" data-i18n="[title]sidebar.card.support.button.support.title"><span data-i18n="sidebar.card.support.button.support.label">Support</span> <span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon-heart"><path d="m11.645 20.91-.007-.003-.022-.012a15.247 15.247 0 0 1-.383-.218 25.18 25.18 0 0 1-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0 1 12 5.052 5.5 5.5 0 0 1 16.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 0 1-4.244 3.17 15.247 15.247 0 0 1-.383.219l-.022.012-.007.004-.003.001a.752.752 0 0 1-.704 0l-.003-.001Z"/></svg></span></a></div></div></div><div class="sidebar-main-group"><div class="sidebar-main-card"><h4 class="title d-flex justify-content-between align-items-center" data-bikerouter-toggle-target="#sidebar-card-import-hints"><span data-i18n="sidebar.card.import.title">Load and Import</span> <span class="info"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="info-icon"><path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd"/></svg></span></h4><div class="sidebar-main-card-buttons d-flex flex-row flex-wrap align-items-center"><button type="button" id="sidebar-track-load-button" class="js__track-load-button app-button" data-i18n="[title]sidebar.card.import.button.track-load.title;sidebar.card.import.button.track-load.label">Import Tracks</button> <button type="button" id="sidebar-nogo-load-button" class="js__nogo-load-button app-button" data-i18n="[title]sidebar.card.import.button.nogo-load.title;sidebar.card.import.button.nogo-load.label">Load No-Go Areas</button></div><div id="sidebar-card-import-hints" class="d-none"><p class="mt-4 small" data-i18n="[html]sidebar.card.import.help1">Import one or more GPX tracks (or GeoJSON, KML, etc.) (Shortcut <kbd>O</kbd>). Import multiple tracks as map layers, or import a single track as a map layer or convert it into a route to continue planning directly.</p><p class="small" data-i18n="[html]sidebar.card.import.help3">If you have no-go areas as a GeoJSON file, you can easily import them (Shortcut<kbd>Shift</kbd> <kbd>N</kbd>).</p></div></div></div><div class="sidebar-main-group"><div class="sidebar-main-card"><h4 class="title d-flex justify-content-between align-items-center" data-bikerouter-toggle-target="#sidebar-card-stats-hints"><span data-i18n="sidebar.card.stats.title">Route Statistics</span> <span class="info"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="info-icon"><path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd"/></svg></span></h4><div class="sidebar-route-stats"><div class="d-flex flex-column"><span class="label" data-i18n="sidebar.card.stats.label.distance">Distance</span><span><span id="sidebar-stats-value-distance">---</span> <span class="unit">km</span></span></div><div class="d-flex flex-column"><span class="label" data-i18n="sidebar.card.stats.label.duration">Ride Time</span><span><span id="sidebar-stats-value-duration">---</span> <span class="unit">h</span></span></div><div class="d-flex flex-column"><span class="label" data-i18n="sidebar.card.stats.label.elevation-max">Max. Elevation</span><span><span id="sidebar-stats-value-maximum-elevation">---</span> <span class="unit">m ⛰</span>️</span></div><div class="d-flex flex-column"><span class="label" data-i18n="sidebar.card.stats.label.ascend">Ascend</span><span><span id="sidebar-stats-value-ascend">---</span> <span class="unit">m ↗</span></span></div><div class="d-flex flex-column"><span class="label" data-i18n="sidebar.card.stats.label.plain-ascend">Plain Ascend</span><span><span id="sidebar-stats-value-plain-ascend">---</span> <span class="unit">m ↗</span></span></div><div class="d-flex flex-column justify-content-center"><button id="sidebar-button-elevation-profile" class="app-button app-button--elevation" data-i18n="sidebar.card.stats.label.button-elevation-profile">Elevation Profile</button></div></div><div id="sidebar-card-stats-hints" class="d-none"><p class="small mt-4" data-i18n="sidebar.card.stats.help1">Many (!) more statistics are available in the right sidebars.</p><p class="small"><a href="https://docs.bikerouter.de/en/analyze-route/" target="_blank" data-i18n="[href]sidebar.card.stats.docs-link;sidebar.card.stats.help2">Read everything about Route analysis features</a></p></div></div></div></div></div><dialog id="roundtrip-settings-dialog" aria-labelledby="roundtrip-settings-dialog-title" class="roundtrip-dialog app-dialog app-dialog--width-wide app-dialog--centered app-dialog--height-default app-dialog--backdrop-clear"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 id="roundtrip-settings-dialog-title" class="app-dialog__title" data-i18n="roundtrip.title">Round Trip Planner</h4><button type="button" class="app-dialog__close" data-dialog-close aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><p class="mb-2 mb-md-4 text-sm" data-i18n="roundtrip.intro">Place a starting point on the map, adjust settings for the round trip, then press the "Build Round Trip" button.</p><div id="roundtrip-message" class="mb-4 py-1 w-100 d-none text-center bg-warning rounded-sm"></div><form id="roundtrip-settings"><div class="roundtrip-radius form-group mb-3 mb-md-5"><div class="d-flex justify-content-center"><label for="roundTripDistance" data-i18n="roundtrip.distance">Distance</label></div><div class="roundtrip-radius-value d-flex justify-content-center"><strong><span id="roundTripDistance-value">25 - 35 km</span></strong></div><div class="roundtrip-radius-slider d-flex flex-row flex-nowrap align-items-center"><div class="me-2 text-black-50 text-sm text-nowrap" data-roundtrip-radius="1">0 - 5 km</div><input type="range" class="form-control-range" name="roundTripDistance" id="roundTripDistance" min="1" max="100" value="5"/><div class="ms-2 text-black-50 text-sm text-nowrap" data-roundtrip-radius="100">450 - 650 km</div></div><div class="roundtrip-preset-buttons-container flex-column flex-md-row align-items-center align-items-md-start justify-content-center"><span data-i18n="roundtrip.presets">Presets:</span><div id="roundtrip-preset-buttons" class="d-flex flex-row flex-wrap align-items-center justify-content-center"><button type="button" class="app-button app-button--small" data-roundtrip-radius="5">25 - 35 km</button> <button type="button" class="app-button app-button--small" data-roundtrip-radius="10">45 - 65 km</button> <button type="button" class="app-button app-button--small" data-roundtrip-radius="15">70 - 100 km</button> <button type="button" class="app-button app-button--small" data-roundtrip-radius="20">90 - 130 km</button> <button type="button" class="app-button app-button--small" data-roundtrip-radius="25">110 - 160 km</button> <button type="button" class="app-button app-button--small" data-roundtrip-radius="30">140 - 200 km</button> <button type="button" class="app-button app-button--small" data-roundtrip-radius="50">225 - 325 km</button></div></div></div><div class="roundtrip-headings mb-4 mb-md-5"><div class="d-flex flex-column align-items-center justify-content-center"><label for="roundtrip-heading-input" data-i18n="roundtrip.heading">Heading</label> <input type="hidden" name="heading" id="roundtrip-heading-input" value="90"/><div id="circular-slider" class="circular-slider"></div></div></div></form></div><div class="app-dialog__footer"><button type="button" id="roundtrip-settings-dialog-close" class="app-button"><span data-i18n="modal.close">Close</span> <i class="fa fa-times"></i></button> <button type="submit" id="roundtrip-submit" class="app-button app-button--primary" form="roundtrip-settings"><span data-i18n="roundtrip.submit">Build Round Trip</span> <i id="roundtrip-settings-dialog-spinner" class="fa angle-double-right"></i></button></div></div></dialog><dialog id="custom_layers" class="custom-layers-dialog app-dialog app-dialog--centered app-dialog--width-wide app-dialog--height-full app-dialog--backdrop-dim" aria-labelledby="custom-layers-title"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" id="custom-layers-title" data-i18n="layers.customize">Customize layers</h4><button type="button" class="app-dialog__close" data-dialog-close aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><div class="form-group"><label for="layer_name" data-i18n="layers.custom-layer-name-label">Custom layer name</label> <input class="form-control" id="layer_name" spellcheck="true" wrap="off" placeholder="OpenSeaMap"/><p class="help-block" data-i18n="layers.custom-layer-name-helptext">example: OpenStreetMap</p></div><div class="form-group"><label for="layer_name" data-i18n="layers.custom-layer-url-label">Custom layer URL/Query</label> <input class="form-control" id="layer_url" spellcheck="false" wrap="off" placeholder="https://..."/><p class="help-block"><span data-i18n="[html]layers.custom-layer-url-helptext-normal">URL for normal layers, ex: https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png</span><br/><span data-i18n="[html]layers.custom-layer-url-helptext-overpass">Overpass Query, ex: nwr[shop]['diet:vegan']['diet:vegan'!=no];</span></p></div><div class="d-flex flex-row justify-content-center align-items-center"><button type="button" id="custom_layers_add_base" class="me-2 app-button app-button--primary" data-i18n="layers.add-base">Add base layer</button> <button type="button" id="custom_layers_add_overlay" class="me-2 app-button app-button--primary" data-i18n="layers.add-overlay">Add overlay</button> <button type="button" id="custom_layers_add_overpass" class="app-button app-button--primary" data-i18n="layers.add-overpass">Add Overpass query</button></div><table id="custom_layers_table" class="table table-sm mt-4"></table><p class="help-block mt-3"><span data-i18n="[html]layers.custom-layer-italic-hint">Custom layers are shown in <i>italics</i> in the layer selection.</span></p></div><div class="app-dialog__footer"><button type="button" class="app-button" data-i18n="modal.close" data-dialog-close>Close</button></div></div></dialog><dialog id="about-local-profiles-dialog" class="about-local-profiles-dialog app-dialog app-dialog--centered app-dialog--width-wide app-dialog--height-auto app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="about-local-profiles.title">Custom Routing Profiles</h4><button id="about-local-profiles-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><p data-i18n="about-local-profiles.helptext1">You can save your customizations to routing profiles directly in your browser and also load them from there. No longer needed custom profiles can also be deleted.</p><p data-i18n="about-local-profiles.helptext2">These customizations are only visible for you and in the currently used browser and not for other users.</p><p data-i18n="about-local-profiles.helptext3">If you want to use your custom profiles on other devices, you should save them on your computer. This way you also have a backup in case you reset your browser.</p><p data-i18n="about-local-profiles.helptext4">To transfer custom profiles to another computer, use the settings export feature to download all important Bikerouter settings, including your custom profiles. On the new computer, import the downloaded file using the import settings feature. Export and import buttons are located in the main dropdown menu.</p></div><div class="app-dialog__footer"><button id="about-local-profiles-dialog-close" class="app-button app-button--primary" data-i18n="modal.close">Close</button></div></div></dialog><dialog id="about-dialog" class="about-dialog app-dialog app-dialog--centered app-dialog--width-wide app-dialog--height-full app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="about.title">Über bikerouter.de</h4><div class="mx-2 about-version">(2026.30)</div><button id="about-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><p data-i18n="[html]about.introduction">bikerouter.de ist der perfekte Weg, um Bikerouten online zu planen und basiert auf BRouter-Web. <b>BRouter-Web ist ein Projekt von Norbert Renner,</b> die Routing-Engine <b>BRouter stammt von Arndt Brenschede.</b></p><p>bikerouter.de auf <button class="br-switch-language app-button app-button--small app-button--link" data-language="de">🇩🇪 Deutsch</button> <button class="br-switch-language app-button app-button--small app-button--link" data-language="en">🇪🇺 English</button> <small data-i18n="about.language-switch-reload"></small></p><p data-i18n="[html]about.hosted">bikerouter.de wird zur Verfügung gestellt von <a href="https://marcusjaschen.com/" rel="noopener" target="_blank">Marcus Jaschen</a>. Kontakt: <a href="https://en.osm.town/@bikerouter" rel="me noopener" target="_blank">@bikerouter@en.osm.town</a></p><p data-i18n="about.manual">Das Handbuch zu Bikerouter.de entsteht hier:</p><p><a class="app-button app-button--small app-button--info" target="_blank" href="https://docs.bikerouter.de/de/" data-i18n="about.link-manual-de">Bikerouter Handbuch 🇩🇪</a> <a class="app-button app-button--small app-button--info" target="_blank" href="https://docs.bikerouter.de/en/" data-i18n="about.link-manual-en">Bikerouter Manual 🇪🇺</a></p><p data-i18n="[html]about.support"><strong>Du hast Fragen,</strong> die durch die Tipps noch nicht beantwortet wurden? Im <a href="https://www.mtb-news.de/forum/forums/bikerouter/" rel="noopener nofollow" target="_blank">bikerouter.de Support-Forum</a> bei MTB-News.de wird dir mit Sicherheit weitergeholfen! <small><mark>Bitte habe Verständnis, dass ich Support-Anfragen per E-Mail nicht mehr beantworten kann – der Zeitaufwand ist leider zu groß geworden.</mark></small></p><p><small><em data-i18n="about.license">Lizenzen und weitere Infos:</em></small></p><ul><li><small>BRouter-Web: <a href="https://github.com/nrenner/brouter-web" target="_blank">MIT License</a></small></li><li><small>BRouter: <a href="https://github.com/abrensch/brouter" target="_blank">MIT License</a></small></li><li><small>OpenStreetMap: <a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a></small></li><li><small>Digital Terrain Model: <a href="https://sonny.4lima.de" target="_blank">Sonny's LiDAR Digital Terrain Models</a></small></li></ul><p><small><em data-i18n="about.title-routing-data">Routing-Daten:</em></small></p><p><small data-i18n="[html]about.routing-data">Die Routingdaten werden aus <a href="https://www.openstreetmap.org" target="_blank">OpenStreetMap</a> vier- bis fünf Mal täglich neu erstellt. Der Aktualisierungsstand der OpenStreetMap-Daten kann an den <a href="https://brouter.m11n.de/segments/" target="_blank">Datendateien</a> abgelesen werden (Zeitstempel in UTC).</small></p><p id="aboutLinks"><small><a href="/impressum.html" target="_blank" data-i18n="about.imprint">Impressum</a> · <a href="/datenschutz.html" target="_blank" data-i18n="about.privacy">Datenschutzerklärung</a></small></p></div><div class="app-dialog__footer"><button id="about-dialog-help" class="app-button" data-i18n="keyboard-shortcuts.title">Help/Keyboard shortcuts</button> <button id="about-dialog-whats-new" class="app-button" data-i18n="whatsnew.title">What's new?</button> <button id="about-dialog-close" class="app-button app-button--primary" data-i18n="modal.close">Close</button></div></div></dialog><dialog id="help-dialog" class="help-dialog app-dialog app-dialog--centered app-dialog--width-wide app-dialog--height-full app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="help.title">Help</h4><button id="help-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><h5 data-i18n="help.keyboard-shortcuts">Keyboard Shortcuts</h5><ul class="keyboard-shortcuts"><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-main-menu">Open Main Menu</div><div class="keyboard-shortcuts-key"><kbd>F2</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-draw">Enter draw mode</div><div class="keyboard-shortcuts-key"><kbd>d</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-exit-draw">Exit draw mode or close dialog</div><div class="keyboard-shortcuts-key"><kbd>Esc</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-undo">Remove last point from route ("undo")</div><div class="keyboard-shortcuts-key"><kbd>z</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-route-inspector">Toggle Route Inspector</div><div class="keyboard-shortcuts-key"><kbd>i</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-route-manager">Open Route Manager</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>e</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-roundtrip-planner">Open Round Trip Planner</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>r</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-mute-route">Hide route temporarily (as long as key is down, "mute")</div><div class="keyboard-shortcuts-key"><kbd>m</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-add-poi">Add "Point of Interest" (<kbd>Esc</kbd> exits this mode)</div><div class="keyboard-shortcuts-key"><kbd>p</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-zoom-map">Zoom map</div><div class="keyboard-shortcuts-key"><kbd>+</kbd> <kbd>-</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-move-map">Move map</div><div class="keyboard-shortcuts-key"><kbd>←</kbd> <kbd>→</kbd> <kbd>↓</kbd> <kbd>↑</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-locate">Center current position (geolocation)</div><div class="keyboard-shortcuts-key"><kbd>l</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-fit-route-in-viewport">Fit Route in Viewport</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>b</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-search">Search for locations</div><div class="keyboard-shortcuts-key"><kbd>f</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-reverse">Reverse route</div><div class="keyboard-shortcuts-key"><kbd>r</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-nogo">Draw no-go area (<kbd>Esc</kbd> exits this mode)</div><div class="keyboard-shortcuts-key"><kbd>n</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-nogo-load">Load no-go area</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>n</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-delete-route">Delete route</div><div class="keyboard-shortcuts-key"><kbd>Backspace</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-color-coding">Cycle through color-coding modes</div><div class="keyboard-shortcuts-key"><kbd>c</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-elevation-profile">Toggle elevation profile</div><div class="keyboard-shortcuts-key"><kbd>e</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-profile-select">Select routing profile</div><div class="keyboard-shortcuts-key"><kbd>g</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-profile-alternatives">Select alternative routes</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>1</kbd>, <kbd>Shift</kbd> <kbd>2</kbd>, <kbd>Shift</kbd> <kbd>3</kbd>, <kbd>Shift</kbd> <kbd>0</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-export">Export route</div><div class="keyboard-shortcuts-key"><kbd>x</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-share">Share route</div><div class="keyboard-shortcuts-key"><kbd>a</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-load-track">Import track(s)</div><div class="keyboard-shortcuts-key"><kbd>o</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-load-track-direct">Import track(s) directly as overlay</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>o</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-about">Show "About" dialog</div><div class="keyboard-shortcuts-key"><kbd>h</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-sidebar-toggle">Toggle sidebar</div><div class="keyboard-shortcuts-key"><kbd>t</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-sidebar-switch-tabs">Cycle through tabs in sidebar</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>t</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-straight-line-toggle">Toggle straight line (in draw mode)</div><div class="keyboard-shortcuts-key"><kbd>b</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-straight-line-append">Append straight line (in draw mode)</div><div class="keyboard-shortcuts-key"><kbd>Shift</kbd> <kbd>click</kbd></div></li><li><div class="keyboard-shortcuts-desc" data-i18n="help.shortcut-help-dialog">Open this help dialog</div><div class="keyboard-shortcuts-key"><kbd>?</kbd></div></li></ul></div><div class="app-dialog__footer"><button id="help-dialog-close" class="app-button" data-i18n="modal.close">Close</button></div></div></dialog><dialog id="whats-new-dialog" class="whats-new-dialog app-dialog app-dialog--centered app-dialog--width-wide app-dialog--height-full app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="whatsnew.title">What's new?</h4><button id="whats-new-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body" id="whats-new-list"></div><div class="app-dialog__footer"><button id="whats-new-dialog-close" class="app-button" data-i18n="modal.close">Close</button></div></div></dialog><dialog id="settings-dialog" class="app-dialog app-dialog--centered app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="settings.dialog.title">Settings</h4><button id="settings-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><label class="d-flex flex-column align-items-start"><span class="d-flex align-items-center"><input type="checkbox" id="setting-enable-preview-features" class="js__settings-item me-2"/> <span class="small">Enable Preview Features</span> </span><span class="small text-muted">Reload the page after changing this setting.</span></label> <label class="d-flex align-items-center"><input type="color" id="setting-route-color" class="js__settings-item me-2"/><span data-i18n="settings.dialog.label.route-color" class="small">Color of Route Line</span></label> <label class="d-flex align-items-center"><input type="color" id="setting-route-casing-color" class="js__settings-item me-2"/><span data-i18n="settings.dialog.label.route-casing-color" class="small">Color of Route Line Casing</span></label> <label class="d-flex flex-column align-items-start"><span class="d-flex align-items-center"><input type="checkbox" id="setting-route-inspector-osm-lookup" class="js__settings-item me-2"/> <span data-i18n="settings.dialog.label.route-inspector-osm-lookup" class="small">Look up OpenStreetMap data in Route Inspector</span> </span><label class="d-flex align-items-center"><input type="checkbox" id="setting-debug-mode" class="js__settings-item me-2"/><span data-i18n="settings.dialog.label.debug-mode" class="small">Enable debug mode</span></label></label><h5 class="subtitle mt-3" data-i18n="settings.dialog.subtitle.data-management">Data Management</h5><div class="d-flex flex-row flex-nowrap align-items-center justify-content-start gap-2"><button id="sidebar-settings-export-button" class="app-button" data-i18n="settings.dialog.button.export">Export Settings</button> <button id="sidebar-settings-import-button" class="app-button" data-i18n="settings.dialog.button.import">Import Settings</button> <input type="file" id="sidebar-settings-import-file" style="display:none" accept=".json"/></div><div id="sidebar-settings-cloud-container" class="d-none d-flex flex-row flex-nowrap align-items-center justify-content-start gap-2 mt-2"><button id="sidebar-settings-store-cloud-button" class="app-button" data-i18n="settings.dialog.button.store-cloud">Save to Cloud</button> <button id="sidebar-settings-load-cloud-button" class="app-button" data-i18n="settings.dialog.button.load-cloud">Load from Cloud</button></div><h5 class="subtitle mt-3">Tileflood</h5><label class="d-flex flex-column"><span class="small mb-1">API Key for Tileflood Integration</span> <input id="setting-tileflood-api-key" class="form-control form-control-sm js__settings-item" placeholder="Enter API Key"/></label><h5 class="subtitle mt-3" data-i18n="settings.dialog.subtitle.language">Choose Language</h5><p class="mb-0"><button class="br-switch-language app-button app-button--small app-button--link" data-language="de">🇩🇪 Deutsch</button> <button class="br-switch-language app-button app-button--small app-button--link" data-language="en">🇪🇺 English</button> <small data-i18n="about.language-switch-reload"></small></p></div><div class="app-dialog__footer"><button id="settings-dialog-close" class="app-button app-button--primary" data-i18n="modal.close">Close</button></div></div></dialog><dialog id="export-dialog" class="export-dialog app-dialog app-dialog--centered app-dialog--height-default app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="export.title">Export Route</h4><button id="export-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><form name="export" id="exportForm"><fieldset class="form-group row mb-4"><label class="col-form-label col-sm-2" for="trackname" data-i18n="export.trackname">Name</label><div class="col-sm-10"><input class="form-control" id="trackname"/> <span id="trackname-message" class="validation-warning"></span><div class="d-flex flex-row flex-nowrap align-items-center"><span class="text-sm" data-i18n="export.trackname-template">Name Presets:</span> <button type="button" disabled="disabled" class="js__btn-trackname-template app-button app-button--link app-button--small" id="export-trackname-template-default" data-i18n="export.trackname-template-default">Default</button> <button type="button" disabled="disabled" class="js__btn-trackname-template app-button app-button--link app-button--small" id="export-trackname-template-date" data-i18n="export.trackname-template-date">Date</button></div></div></fieldset><fieldset id="export-format" class="form-group row mb-4"><label class="col-form-label col-sm-2" for="export-format-selector">Format</label><div class="col-sm-10"><select name="format" class="form-control" id="export-format-selector"><option value="gpx" class="turn-instructions-supported">GPX</option><option value="kml">KML</option><option value="geojson">GeoJSON</option><option value="csv">CSV</option><option value="fit" class="turn-instructions-supported">FIT</option></select><div class="turninstructions-info" hidden data-i18n="export.turninstructions">* Marked formats contain turn instructions.</div></div></fieldset><fieldset id="export-includes" class="form-group row"><div class="col-sm-10 offset-sm-2"><div class="form-check form-switch"><input type="checkbox" class="form-check-input" id="include-waypoints" name="include-waypoints"/> <label class="form-check-label" for="include-waypoints"><span data-i18n="export.include_waypoints">Include Waypoints</span></label></div></div></fieldset></form></div><div class="app-dialog__footer"><button type="button" class="app-button" data-i18n="modal.close" id="export-dialog-close">Close</button> <button type="button" class="app-button app-button--primary" id="exportShare"><span class="fa fa-qrcode"></span> <span data-i18n="export.button-share">Share Route</span></button> <button type="submit" class="app-button app-button--primary" form="exportForm" id="submitExport"><span class="fa fa-download"></span> <span data-i18n="export.button-download">Export route</span></button></div></div></dialog><dialog id="share-dialog" class="share-dialog app-dialog app-dialog--centered app-dialog--height-default app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="share.title">Share Route</h4><button id="share-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><p><span data-i18n="share.introduction">Share this route using a QR Code or by copying the link to the clipboard. The QR Code opens the route on your smartphone browser for viewing, changing or exporting.</span> <button type="button" class="share-button-info app-button app-button--link app-button--small" data-bikerouter-reveal-target="#share-tips" data-bikerouter-hide-self><i class="fa fa-info"></i> <span data-i18n="share.about-shortlinks">About Shortlinks</span></button></p><div class="d-flex flex-column"><div class=""><div class="share-buttons mb-3 d-flex flex-wrap justify-content-center"><button class="share-create-shortlink app-button app-button--primary app-button--large"><i class="fa fa-copy"></i> <span data-i18n="share.create-shortlink">Create Shortlink and QR Code</span> <i class="fa fa-qrcode"></i></button></div><div class="share-buttons mb-3 d-flex flex-wrap justify-content-center"><a href="https://www.facebook.com/sharer/sharer.php?u={url}" class="share-service share-service-facebook d-inline-flex align-items-center app-button app-button--small app-button--facebook" target="_blank" data-i18n="[title]share.tooltip-facebook" title="Share on Facebook"><i class="fa fa-facebook"></i></a> <a href="whatsapp://send?text={url}" class="share-service share-service-whatsapp d-inline-flex align-items-center app-button app-button--small app-button--whatsapp" data-i18n="[title]share.tooltip-whatsapp" title="Share on WhatsApp" target="_blank"><i class="fa fa-whatsapp"></i></a> <a href="mailto:?subject=Planned Route&body={url}" class="share-service share-service-email d-inline-flex align-items-center app-button app-button--small app-button--email" data-i18n="[title]share.tooltip-email" title="Share by email"><i class="fa fa-envelope"></i></a> <button class="share-service-mastodon app-button app-button--small app-button--mastodon" data-i18n="[title]share.tooltip-mastodon" title="Share on Mastodon" hidden><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" viewBox="0 0 16 16"><path d="M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z"/></svg></button></div></div><div class="my-4 d-flex flex-column flex-nowrap align-items-center"><div id="share-qrcode-img" class="mb-2"></div><div class="d-flex flex-row flex-nowrap align-items-center"><code class="shortlink-container d-none user-select-all"></code><button class="share-copy-shortlink d-none app-button app-button--link app-button--small text-decoration-none"><i class="fa fa-copy"></i></button></div></div><ul id="share-tips" class="share-shortlink-info ps-4 d-none"><li data-i18n="share.info-link-server-storage">When you click the “Create Shortlink and QR Code” button, the current route will be saved on Bikerouter's server, allowing it to be accessed later using the generated short link.</li><li data-i18n="share.info-link-bookmark">You can also copy or bookmark the link from the browser's address bar. This link is longer but does not require server storage.</li></ul></div></div><div class="app-dialog__footer"><button type="button" class="app-button" data-i18n="modal.close" id="share-dialog-close">Close</button> <button type="button" class="app-button app-button--primary" id="shareExport"><span class="fa fa-download"></span> <span data-i18n="share.button-download">Download Route</span></button></div></div></dialog><dialog id="track-import" class="track-dialog app-dialog app-dialog--centered app-dialog--height-default app-dialog--backdrop-clear track-import--empty" aria-labelledby="track-import-title"><div class="app-dialog__panel"><div class="app-dialog__header" id="track-import-header"><h4 class="app-dialog__title" id="track-import-title" data-i18n="trackimport.title">Import Tracks</h4><button type="button" class="app-dialog__close" data-dialog-close aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><form name="track-import-form" id="track-import-form"><div class="mb-4 form-group row align-items-start"><label class="col-form-label col-sm-3" for="track-import-file" data-i18n="trackimport.file">Track file(s)</label><div class="col-sm-9"><input type="file" accept=".gpx,.kml,.geojson,*.*" name="track-import-file" id="track-import-file" class="form-control" multiple="multiple"/></div></div><div class="mb-4 row align-items-start"><div class="text-muted text-sm" data-i18n="trackimport.file-description">Supported formats: GPX, KML, GeoJSON</div><div id="track-import-route-url-notice" class="track-import-route-url-only alert alert-info mt-3"><div class="mb-2" data-i18n="trackimport.route-link-found">This file was created by bikerouter.de and contains a route link which can be restored.</div><button type="button" class="app-button app-button--primary" id="track-import-submit-route-url" data-i18n="trackimport.route-link-load">Restore Saved Route</button></div></div><fieldset id="track-import-options" class="track-import-fieldset track-import-options track-import-track-only"><legend data-i18n="trackimport.import-options">Import Options</legend><div class="track-import-poi-only form-group row align-items-center"><label class="col-form-label col-sm-3" for="track-import-option-poi" data-i18n="trackimport.showpois">Import POIs</label><div class="col-sm-9"><div class="form-check form-switch"><input type="checkbox" class="form-check-input" id="track-import-option-poi" checked="checked"/> <label class="form-check-label" for="track-import-option-poi"><span data-i18n="trackimport.explainpoi">Add waypoints as POIs</span> <span class="track-import-multi-only" data-i18n="trackimport.explainpoi-multi">(applies to all imported files)</span></label></div></div></div><div class="track-import-single-only form-group row align-items-center"><label class="col-form-label col-sm-3" for="track-import-single-color" data-i18n="trackimport.layer-color">Layer color</label><div class="col-sm-9"><input type="color" id="track-import-single-color" class="track-import-single-color" value="#3388ff"/></div></div></fieldset><div id="track-import-no-track-notice" class="track-import-no-track-only alert alert-info" data-i18n="trackimport.no-track-notice">This file does not contain a track, only waypoints. They will be imported as POIs.</div><div class="track-import-single-only track-import-track-only"><fieldset class="track-import-fieldset"><legend data-i18n="trackimport.route-adjustments">Route adjustments</legend><div class="my-2 text-sm text-muted" id="track-import-route-adjustments-description">It's possible to approximate a route from the selected track: choose number of via points, then click “Create Route” below. It will be calculated with the currently selected routing profile.</div><div class="form-group row align-items-center"><label class="col-form-label col-sm-3" for="track-import-option-track-layer" data-i18n="trackimport.tracklayer">Track Layer</label><div class="col-sm-9"><div class="form-check form-switch"><input type="checkbox" class="form-check-input" id="track-import-option-track-layer" checked="checked"/> <label class="form-check-label" for="track-import-option-track-layer" data-i18n="trackimport.explaintracklayer">add track as background layer</label></div></div></div><div class="form-group row align-items-center"><label for="track-import-option-simplify-tolerance" class="col-sm-3" data-i18n="trackimport.number-of-via-points">Number of via points</label><div class="col-sm-9"><input type="range" class="form-range" id="track-import-option-simplify-tolerance" min="-1000" max="1000" step="any" value="0"/></div></div></fieldset></div><div class="track-import-multi-only" id="track-import-file-list-wrapper"><div class="mb-2" data-i18n="trackimport.file-list-title">Selected tracks</div><ul id="track-import-file-list" class="track-import-file-list"></ul></div><div id="msg_busy" class="row float-end me-4 invisible text-danger" data-i18n="trackimport.processing-message">One moment please</div></form></div><div class="app-dialog__footer"><button type="button" class="app-button" data-i18n="modal.close" data-dialog-close>Close</button> <button type="submit" class="app-button app-button--primary track-import-single-only track-import-track-only" form="track-import-form" data-i18n="trackimport.create-route" id="track-import-submit-route">Create Route</button> <button type="submit" class="app-button app-button--primary" form="track-import-form" data-i18n="trackimport.import-as-layer" id="track-import-submit-layer" disabled="disabled">Import as Layer(s)</button></div></div></dialog><dialog id="load-nogos-dialog" class="load-nogos-dialog app-dialog app-dialog--centered app-dialog--height-full app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="loadNogos.title">Load No-Go Areas</h4><button id="load-nogos-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><form name="load-nogos-form" id="load-nogos-form"><input id="nogo-json" hidden/> <input type="hidden" name="nogoWeight" id="nogoWeight" value="-1" min="-1"/><div class="form-group"><label for="nogo-url" data-i18n="loadNogos.upload-label">Upload File</label> <input type="file" name="nogo-file" accept=".geojson" class="form-control" id="nogo-file"/></div><div class="my-4" data-i18n="modal.or">or</div><div class="form-group"><label for="nogo-url" data-i18n="loadNogos.url">Load from URL</label> <input name="nogo-url" id="nogo-url" class="form-control" placeholder="https://example.org/nogo.json"/> <small id="nogo-url-help" class="form-text text-muted" data-i18n="loadNogos.url-help">Must be a GeoJSON file containing points or polygons.</small></div><div class="my-4 fw-bolder" data-i18n="loadNogos.defaultProperties">Adjustments</div><div class="row"><div class="col-12 col-md-6"><div class="form-group mb-2 mb-md-0 d-flex flex-column h-100"><label for="nogoRadius" data-i18n="loadNogos.nogoRadius">No-Go radius (for points, in m)</label> <input type="number" class="form-control mt-auto" name="nogoRadius" id="nogoRadius" value="20" min="0"/></div></div><div class="col-12 col-md-6"><div class="form-group d-flex flex-column h-100"><label for="nogoBuffer" data-i18n="loadNogos.nogoBuffer">Add buffer (for areas, in m)</label> <input type="number" class="form-control mt-auto" name="nogoBuffer" id="nogoBuffer" value="0" min="0"/></div></div></div></form></div><div class="app-dialog__footer"><p id="nogoError" class="invalid-feedback" style="display:none"></p><button id="load-nogos-dialog-close" class="app-button" data-i18n="modal.close">Close</button> <button type="submit" class="app-button app-button--primary" form="loadNogosForm" data-i18n="loadNogos.load" id="submitNogos">Load</button></div></div></dialog><dialog id="clear-route-dialog" class="clear-route-dialog app-dialog app-dialog--centered app-dialog--width-small app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="map.clear-route">Clear route</h4><button id="clear-route-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><form id="clear-route-form"><div class="form-check mb-2"><input class="form-check-input" type="checkbox" value="route" id="clear-route-check" checked="checked"/> <label class="form-check-label" for="clear-route-check" data-i18n="map.delete-route">Delete route</label></div><div class="form-check mb-2"><input class="form-check-input" type="checkbox" value="nogo" id="clear-nogo-check"/> <label class="form-check-label" for="clear-nogo-check" data-i18n="map.delete-nogo-areas">Delete no-go areas</label></div><div class="form-check mb-2"><input class="form-check-input" type="checkbox" value="pois" id="clear-pois-check"/> <label class="form-check-label" for="clear-pois-check" data-i18n="map.delete-pois">Delete POIs</label></div></form></div><div class="app-dialog__footer"><button type="button" class="app-button" data-i18n="modal.close" id="clear-route-dialog-close">Close</button> <button type="submit" form="clear-route-form" class="app-button app-button--primary" id="clear-route-confirm"><span data-i18n="modal.ok">OK</span></button></div></div></dialog><dialog id="poi-name-dialog" class="poi-name-dialog app-dialog app-dialog--centered app-dialog--height-default app-dialog--backdrop-dim"><div class="app-dialog__panel"><div class="app-dialog__header"><h4 class="app-dialog__title" data-i18n="map.enter-poi-name">Enter Point of Interest name</h4><button id="poi-name-dialog-close-icon" class="app-dialog__close" aria-label="Close" title="Close" data-dialog-close><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg></button></div><div class="app-dialog__body"><form name="poi-name-form" id="poi-name-form"><div class="form-group"><label for="poi-name-input" data-i18n="map.enter-poi-name">Enter Point of Interest name</label> <input class="form-control" id="poi-name-input" spellcheck="true"/></div></form></div><div class="app-dialog__footer"><button type="button" class="app-button" data-i18n="modal.close" data-dialog-close>Close</button> <button type="submit" class="app-button app-button--primary" form="poi-name-form" data-i18n="modal.add">Add</button></div></div></dialog><div id="content" class="d-flex flex-column flex-grow-1"><div id="sidebarTabs" class="leaflet-sidebar-tabs collapsed bikerouter-sidebar-tab-bar"><ul role="tablist" class="bikerouter-sidebar-tab-list"><li><a class="bikerouter-sidebar-tab-button" href="#tab_layers_control" role="tab" data-i18n="[title]sidebar.tab-tooltip" data-i18n-options='{
"action": "$t(sidebar.layers.tooltip)",
"toggleKey": "T",
"switchKey": "$t(keyboard.shift)+T"
}' title="Select layers"><svg class="fa" width="1em" height="1em" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polygon style="fill:currentColor" points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 11.5 12 16.5 22 11.5"></polyline><polyline points="2 16 12 21 22 16"></polyline></svg></a></li><li><a class="bikerouter-sidebar-tab-button" href="#tab_profile" role="tab" data-i18n="[title]sidebar.tab-tooltip" data-i18n-options='{
"action": "$t(sidebar.customize-profile.tooltip)",
"toggleKey": "T",
"switchKey": "$t(keyboard.shift)+T"
}' title="Customize profile"><i class="fa fa-wrench"></i></a></li><li><a class="bikerouter-sidebar-tab-button" href="#tab_data" role="tab" data-i18n="[title]sidebar.tab-tooltip" data-i18n-options='{
"action": "$t(sidebar.data.tooltip)",
"toggleKey": "T",
"switchKey": "$t(keyboard.shift)+T"
}' title="Show detailed route data table"><i class="fa fa-table"></i></a></li><li><a class="bikerouter-sidebar-tab-button" href="#tab_analysis" role="tab" data-i18n="[title]sidebar.tab-tooltip" data-i18n-options='{
"action": "$t(sidebar.analysis.tooltip)",
"toggleKey": "T",
"switchKey": "$t(keyboard.shift)+T"
}' title="Analyse route"><i class="fa fa-pie-chart"></i></a></li><li><a class="bikerouter-sidebar-tab-button" href="#tab_waypoints" role="tab" data-i18n="[title]sidebar.tab-tooltip" data-i18n-options='{
"action": "$t(sidebar.waypoints.tooltip)",
"toggleKey": "T",
"switchKey": "$t(keyboard.shift)+T"
}' title="Show Route Points"><svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 816 1838"><path d="M278.7 1616.2V795.6a408 408 0 1 1 258.6 0v820.6L408 1837.8zM222.6 408.8c0-89.6 63.8-164.5 148.3-181.7V153a259 259 0 0 0-222.5 255.8c0 12.6 2 24.8 3.8 37h74.2q-3.8-18-3.8-37"/></svg></a></li></ul></div><div class="leaflet-sidebar-flex-row flex-grow-1"><div id="map" class="leaflet-sidebar-map"><div id="preview" hidden data-i18n="map.preview">Preview</div></div><div id="sidebar" class="leaflet-sidebar collapsed"><div class="leaflet-sidebar-content"><div class="leaflet-sidebar-pane" id="tab_layers_control"><h2 class="leaflet-sidebar-header mb-3"><span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span><span class="d-none d-md-block leaflet-sidebar-expand"><i class="fa fa-expand"></i></span><span data-i18n="sidebar.layers.title">Layers</span></h2><div id="layers-control-wrapper"></div><div id=""><div class="leaflet-control-layers-separator"></div><div id="leaflet-control-layers-overlays-opacity-slider" class="mb-2 d-flex flex-column"><label data-i18n="sidebar.layers.overlay-opacity">Overlay transparency</label></div><div><label for="layers-overlays-single-opacity-slider" class="d-flex align-items-center"><input type="checkbox" id="layers-overlays-single-opacity-slider" value="on"/> <span class="ms-1" data-i18n="sidebar.layers.single-opacity">Show opacity sliders for each layer</span></label></div></div><div class="leaflet-control-layers-separator"></div><div id="layers-button-group" class="d-flex gap-2 justify-content-between align-items-center mb-2"><div hidden id="tree-button-group"><button type="button" id="expand_tree_button" class="app-button app-button--small" data-i18n="[title]sidebar.layers.expand" title="Expand all"><span class="fa fa-plus-square-o"></span></button> <button type="button" id="collapse_tree_button" class="app-button app-button--small" data-i18n="[title]sidebar.layers.collapse" title="Collapse all"><span class="fa fa-minus-square-o"></span></button> <button type="button" id="filter_enabled_layers_button" class="app-button app-button--small" data-i18n="[title]sidebar.layers.filter-enabled" title="Show enabled layers"><span class="fa fa-check-square-o"></span></button></div><div></div><div class="d-flex flex-wrap justify-content-end align-items-center gap-2"><button type="button" id="optional_layers_button" class="app-button app-button--primary" data-i18n="[title]sidebar.layers.optional" title="Add or remove optional layers"><svg class="icon-button icon-black" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 1200"><path d="m72 426.12 528-228.84 528 228.84-145.68 63.117L600 654.957l-382.32-165.72z"/><path d="m72 600 145.68-63.121L600 702.599l382.32-165.72L1128 600l-145.68 63.121L600 828.841l-382.32-165.72z"/><path d="m1128 773.88-528 228.84L72 773.88l145.56-63.121L600 875.999l382.44-165.24z"/></svg> <span data-i18n="sidebar.layers.optional-layers">More Layers</span></button> <button type="button" id="custom_layers_button" class="app-button app-button--primary" data-i18n="[title]sidebar.layers.customize" title="Add or remove custom layers"><span class="fa fa-plus-square"></span> <span data-i18n="sidebar.layers.custom-layers">Custom layers</span></button></div></div><div hidden id="optional-layers"><div class="alert alert-info" data-i18n="sidebar.layers.optional"></div><div class="form-group mb-3"><label for="optional-layers-search" data-i18n="sidebar.layers.search-label">Search for layers by name</label> <input type="search" id="optional-layers-search" class="form-control form-control-sm" placeholder="Filter layers" data-i18n="[placeholder]sidebar.layers.search-placeholder"/></div><div id="optional-layers-tree"></div></div></div><div class="leaflet-sidebar-pane" id="tab_profile"><h2 class="leaflet-sidebar-header mb-3"><span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span><span class="d-none d-md-block leaflet-sidebar-expand"><i class="fa fa-expand"></i></span><span data-i18n="sidebar.customize-profile.title">Customize profile</span></h2><form class="d-flex flex-column flex-grow-1"><ul class="nav nav-tabs" id="profileEditorTabs" role="tablist"><li class="nav-item"><a class="nav-link active" id="params-tab" data-bs-toggle="tab" href="#profile_params_container" role="tab" aria-controls="profile_params_container" aria-selected="true" data-i18n="sidebar.profile.options">Options</a></li><li class="nav-item"><a class="nav-link" id="profile-editor-tab" data-bs-toggle="tab" href="#profile_editor" role="tab" aria-controls="profile_editor" aria-selected="false" data-i18n="sidebar.profile.profile">Profile</a></li><span id="profile-pinned" hidden><i class="fa fa-thumb-tack"></i></span></ul><div class="tab-content d-flex flex-column flex-grow-1" id="profileEditorTabsContent"><div id="profile_params_container" class="flex-column flex-grow-1 tab-pane show active" role="tabpanel" aria-labelledby="params-tab"><div id="profile_params"></div><div class="form-group pt-1 d-flex justify-content-between align-items-center"><div class="d-flex flex-row flex-nowrap align-items-center gap-3 me-3"><select class="form-select form-select-sm local_profiles js__local_profiles" name="local_profile"><option value="" selected="selected" disabled="disabled" data-i18n="sidebar.customize-profile.select-local-profile">Load saved...</option></select> <button type="button" class="app-button app-button--link app-button--link-no-underline js__load-local-profile" data-i18n="[title]sidebar.customize-profile.load-local-profile" title="Load selected custom profile"><span class="fa fa-folder-open"></span></button> <button type="button" class="app-button app-button--link app-button--link-no-underline js__save-local-profile" data-i18n="[title]sidebar.customize-profile.save-local-profile" title="Save customized profile to Browser storage"><span class="fa fa-save"></span></button> <button type="button" class="app-button app-button--link app-button--link-no-underline js__delete-local-profile" data-i18n="[title]sidebar.customize-profile.delete-local-profile" title="Delete selected custom profile"><span class="fa fa-trash-o"></span></button> <button id="btn-info-local-profile" type="button" class="app-button app-button--link app-button--link-no-underline js__info-local-profile" data-i18n="[title]sidebar.customize-profile.info-local-profile" title="About managing custom profiles"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="d-flex info-icon"><path fill-rule="evenodd" d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z" clip-rule="evenodd"/></svg></button></div><button id="save" type="button" class="app-button app-button--primary app-button--small d-flex flex-row flex-nowrap align-items-center"><span class="fa fa-cloud-upload me-1"></span> <span data-i18n="sidebar.profile.apply">Apply</span></button></div></div><div id="profile_editor" class="flex-column flex-grow-1 tab-pane" role="tabpanel" aria-labelledby="profile-editor-tab"><textarea class="form-control flex-grow-1" id="profile_upload" spellcheck="false" wrap="off" data-i18n="[placeholder]sidebar.profile.placeholder" placeholder="Write your custom profile here."></textarea><div id="profile_message"></div><div class="profile-editor-buttons form-group pt-1"><div class="d-flex flex-row flex-nowrap align-items-center gap-3 me-3"><select class="form-select form-select-sm js__local_profiles" name="local_profile"><option value="" selected="selected" disabled="disabled" data-i18n="sidebar.customize-profile.select-local-profile">Load saved...</option></select> <button type="button" class="app-button app-button--link app-button--link-no-underline js__load-local-profile" data-i18n="[title]sidebar.customize-profile.load-local-profile" title="Load selected custom profile"><span class="fa fa-folder-open"></span></button> <button type="button" class="app-button app-button--link app-button--link-no-underline js__save-local-profile" data-i18n="[title]sidebar.customize-profile.save-local-profile" title="Save customized profile to Browser storage"><span class="fa fa-save"></span></button> <button type="button" class="app-button app-button--link app-button--link-no-underline js__delete-local-profile" data-i18n="[title]sidebar.customize-profile.delete-local-profile" title="Delete selected custom profile"><span class="fa fa-trash-o"></span></button></div><button id="upload" type="button" class="app-button app-button--primary app-button--small d-flex flex-row flex-nowrap align-items-center"><span class="fa fa-cloud-upload me-1"></span> <span data-i18n="sidebar.profile.apply">Apply</span></button></div></div></div></form></div><div class="leaflet-sidebar-pane" id="tab_data"><h2 class="leaflet-sidebar-header mb-3"><span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span> <span class="d-none d-md-block leaflet-sidebar-expand"><i class="fa fa-expand"></i></span> <span id="data-sync-map" class="sync-map active" data-i18n="[title]sidebar.data.sync-map" title="Synchronize map"><i class="fa fa-exchange"></i></span> <span data-i18n="sidebar.data.title">Data</span></h2><table id="datatable" class="dataTable mini cell-border hover stripe"></table></div><div class="leaflet-sidebar-pane" id="tab_analysis"><h2 class="leaflet-sidebar-header mb-3"><span data-i18n="sidebar.analysis.title">Analysis</span> <span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span></h2><div id="track_statistics" class="d-flex flex-column flex-grow-1"></div></div><div class="leaflet-sidebar-pane" id="tab_waypoints"><h2 class="leaflet-sidebar-header mb-3"><span data-i18n="sidebar.waypoints.title">Waypoints</span> <span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span></h2><template id="waypoint-item"><li class="py-1 px-2 mb-3 waypoint d-flex flex-row flex-wrap justify-content-between align-items-stretch" draggable="true"><div class="waypoint-icon-container"><div class="waypoint-icon"></div></div><div class="waypoint-stats d-flex flex-column"><div class="waypoint-stats-row d-flex flex-row flex-grow-1"><div class="waypoint-stats-icon waypoint-stats-icon-distance me-2"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 16 16"><path fill="currentColor" d="M2.146 8.853a.5.5 0 0 1 0-.707l3-3a.5.5 0 1 1 .708.707L3.707 8h8.586l-2.147-2.147a.5.5 0 0 1 .708-.707l3 3a.5.5 0 0 1 0 .707l-3 3a.5.5 0 0 1-.708-.707L12.293 9H3.707l2.147 2.146a.5.5 0 1 1-.708.707l-3-3Z"/></svg></div><div class="waypoint-stats-value waypoint-stats-value-distance me-1"></div><div class="waypoint-stats-unit waypoint-stats-unit-distance">km</div></div><div class="waypoint-stats-row d-flex flex-row flex-grow-1"><div class="waypoint-stats-icon waypoint-stats-icon-ascend me-2"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24"><path fill="currentColor" d="M19 21H4q-.625 0-.888-.537t.088-1.038l4.7-6.6q.275-.4.7-.613T9.525 12h4.025l5.7-6.65q.45-.525 1.1-.288T21 6v13q0 .825-.588 1.413T19 21ZM7.5 10l-3.1 4.375q-.25.35-.65.413T3 14.6q-.35-.25-.412-.65t.187-.75L5.9 8.85q.275-.4.7-.625T7.525 8h4.025l4.05-4.725q.275-.325.675-.35t.725.25q.325.275.35.675t-.25.725L13.05 9.3q-.275.35-.675.525T11.55 10H7.5Z"/></svg></div><div class="waypoint-stats-value waypoint-stats-value-ascend me-1"></div><div class="waypoint-stats-unit waypoint-stats-unit-ascend">m</div></div><div class="waypoint-stats-row d-flex flex-row flex-grow-1"><div class="waypoint-stats-icon waypoint-stats-icon-duration me-2"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.25 0a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5zM13 9A5 5 0 1 1 3 9a5 5 0 0 1 10 0m1.5 0a6.5 6.5 0 1 1-13 0a6.5 6.5 0 0 1 13 0m-2.28-7.28a.75.75 0 0 1 1.06 0l1.5 1.5a.75.75 0 0 1-1.06 1.06l-1.5-1.5a.75.75 0 0 1 0-1.06M8.75 6a.75.75 0 0 0-1.5 0v3a.75.75 0 0 0 .3.6l1.333 1a.75.75 0 1 0 .9-1.2L8.75 8.625z" clip-rule="evenodd"/></svg></div><div class="waypoint-stats-value waypoint-stats-value-duration me-1"></div><div class="waypoint-stats-unit waypoint-stats-unit-duration">h</div></div></div><div class="waypoint-actions d-flex flex-row justify-content-end align-items-center"><div class="waypoint-handle waypoint-handle-actions fw-bold d-flex align-items-center ms-3 me-2">⋯</div><div class="waypoint-handle waypoint-handle-up d-flex align-items-center me-2"></div><div class="waypoint-handle waypoint-handle-down d-flex align-items-center"></div></div><div class="waypoint-details waypoint-flex-item-full-width pt-3 pb-2 px-2 d-none"><ul class="d-flex flex-column p-0 m-0"><li><a class="waypoint-osm-link" rel="noopener nofollow" target="_blank" data-i18n="sidebar.waypoints.link-openstreetmap">OpenStreetMap</a></li><li class="waypoint-geo-uri-row"><a class="waypoint-geo-link"></a> <button type="button" class="waypoint-geo-copy-button" data-i18n="[title]sidebar.waypoints.copy-geo-uri" title="Copy geo URI" aria-label="Copy geo URI"><span class="waypoint-geo-copy-icon" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="currentColor" d="M10 1.5a1 1 0 0 1 1 1V3h1.5A1.5 1.5 0 0 1 14 4.5v8a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 5 12.5V12h-.5A1.5 1.5 0 0 1 3 10.5v-8A1.5 1.5 0 0 1 4.5 1zm0 1h-5.5a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5H5V4.5A1.5 1.5 0 0 1 6.5 3H10zM6.5 4a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5z"/></svg> </span><span class="waypoint-geo-check-icon d-none" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="currentColor" d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0"/></svg></span></button></li><li><a class="waypoint-split-link-to-here" target="_blank" data-i18n="sidebar.waypoints.split-to-here">Split to here</a></li><li><a class="waypoint-split-link-from-here" target="_blank" data-i18n="sidebar.waypoints.split-from-here">Split from here</a></li></ul></div><div class="waypoint-flex-item-full-width pt-3 pb-0 px-2"><button type="button" class="waypoint-show-profile app-button app-button--link app-button--small p-0" data-i18n="sidebar.waypoints.btn-routing-options">Adjust routing for this segment</button></div><div class="waypoint-profile-container-mount waypoint-flex-item-full-width"></div></li></template><template id="waypoint-profile-container"><div class="waypoint-profile-container waypoint-profile-container-profile waypoint-flex-item-full-width d-none flex-column pt-3 pb-2 px-2"><div class="d-flex flex-row align-items-center mb-2"><input class="waypoint-beeline-checkbox me-1" type="checkbox" value="" id="beeline-check"/> <label class="form-check-label" for="beeline-check" data-i18n="sidebar.waypoints.beeline">Beeline Routing</label></div><label><span data-i18n="sidebar.waypoints.label-profile">Routing profile:</span> <select class="waypoint-profile-select form-control form-control-sm"><option value="" data-i18n="sidebar.waypoints.value-profile-default">Default (global setting)</option></select></label> <label><span data-i18n="sidebar.waypoints.label-alternative">Alternative route:</span> <select class="waypoint-profile-alternative-select form-control form-control-sm"><option value="" data-i18n="sidebar.waypoints.value-profile-alternative-default">Default (global setting)</option></select></label><div class="d-flex justify-content-end"><button type="button" class="waypoint-profile-reset d-none" title="Reset routing options for this segment" data-i18n="[title]sidebar.waypoints.btn-reset;sidebar.waypoints.btn-reset" aria-label="Reset routing options"></button></div></div></template><div class="d-flex flex-column flex-grow-1"><ul id="waypoints-list" class="waypoints-container list-group"></ul></div></div></div></div></div></div><div id="elevation-chart" style="display:none"><span id="no-elevation-data" data-i18n="footer.no-elevation-data" class="d-none">No elevation data available for this route.</span></div><svg width="0" height="0" style="position:absolute;pointer-events:none"><defs><pattern id="diagonal-stripe-highlight" patternUnits="userSpaceOnUse" width="10" height="10"><rect width="10" height="10" fill="var(--track-analysis-bg, red)"/><path d="M-1,1 l2,-2 M0,10 l10,-10 M9,11 l2,-2" stroke="var(--track-analysis-hatch, orange)" stroke-width="3"/><path d="M-1,9 l2,2 M0,0 l10,10 M9,-1 l2,2" stroke="var(--track-analysis-hatch, orange)" stroke-width="3"/></pattern></defs></svg><footer class="d-flex"><div id="stats-info" class="flex-grow-1"><div><span class="fa fa-info-circle"></span> <span data-i18n="footer.stats-info">Start drawing a route to get stats.</span></div></div><div id="stats-container" class="flex-grow-1"><ul id="stats"><li id="beeline-warning" hidden><div class="text-muted small d-none d-md-block"> </div><p class="stats-label"><abbr class="fa fa-exclamation-triangle" data-i18n="[title]footer.beeline-warning" title="Warning: no data for straight lines, values interpolated"></abbr></p></li><li><div class="text-muted small d-none d-md-block" data-i18n="footer.distance">Distance</div><p class="stats-label"><span id="distance">-</span> <abbr data-i18n="[title]footer.kilometer;footer.kilometer-abbrev" title="kilometers">km</abbr></p></li><li><div class="text-muted small d-none d-md-block"><span data-i18n="footer.ascend">Ascend</span> ⋅ <span data-i18n="footer.plain-ascend">Plain ascend</span></div><p class="stats-label"><span id="ascend">-</span><span class="d-none d-md-inline"> </span><abbr class="d-none d-md-inline" data-i18n="[title]footer.meter;footer.meter-abbrev" title="meters">m</abbr> ⋅ <span id="plainascend">-</span> <abbr data-i18n="[title]footer.meter;footer.meter-abbrev" title="meters">m</abbr></p></li><li><div class="text-muted small d-none d-md-block" data-i18n="footer.travel-time">Travel time</div><p class="stats-label"><span id="totaltime">-</span> <abbr data-i18n="[title]footer.hours;footer.hours-abbrev" title="hours">h</abbr></p></li><li class="d-none d-xl-flex stats-widget stats-widget--energy"><div class="text-muted small d-none d-md-block"><span data-i18n="footer.total-energy">Total Energy</span> ⋅ <span data-i18n="footer.energy-per-100km">Energy per 100 km</span></div><p class="stats-label"><span id="totalenergy">-</span><span class="d-none d-md-inline"> </span><abbr class="d-none d-md-inline" data-i18n="[title]footer.kilowatthour;footer.kilowatthour-abbrev" title="kilowatt hours">kWh</abbr> ⋅ <span id="meanenergy">-</span> <abbr data-i18n="[title]footer.kilowatthour;footer.kilowatthour-abbrev" title="kilowatt hours">kWh</abbr></p></li><li class="d-none d-xl-flex stats-widget stats-widget--cost"><div class="text-muted small d-none d-md-block"><span data-i18n="footer.cost">Cost</span> ⋅ <span data-i18n="footer.mean-cost-factor">Mean cost factor</span></div><p class="stats-label"><span id="cost">-</span> ⋅ <span id="meancostfactor">-</span></p></li><li id="stats-benchmark" class="d-none stats-widget stats-widget--benchmark"><div class="text-muted small d-none d-md-block"><span data-i18n="footer.benchmark.title">Benchmark</span></div><p class="stats-label stats-label-benchmark"><span id="benchmark-counter-requests" title="Number of routing request since the last page load" data-i18n="[title]footer.benchmark.explanation-counter-requests">-</span> <span data-i18n="footer.benchmark.number-of-requests">reqs</span>, M=<span id="benchmark-response-time-median" title="Median duration of all routing requests since the last page load" data-i18n="[title]footer.benchmark.explanation-median">-</span>, <span data-i18n="footer.benchmark.duration-last-request">last:</span> <span id="benchmark-response-time" title="Duration of last routing request" data-i18n="[title]footer.benchmark.explanation">-</span></p></li></ul></div><button class="app-button app-button--primary" type="button" id="elevation-btn" aria-expanded="false" aria-label="Toggle elevation chart" data-i18n="[title]keyboard.generic-shortcut" data-i18n-options='{ "action": "$t(footer.elevation-chart)", "key": "E" }' title="Toggle elevation chart"><span class="fa fa-area-chart"></span></button></footer><script>BR = {
version: '2026.30',
};</script><script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script nomodule crossorigin id="vite-legacy-polyfill" src="./assets/polyfills-legacy-YWqjHKDK.js"></script><script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/main-legacy-CdtfstKD.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script></body></html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Кол-во: 4
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 4 оптимально.
Внутренние ссылки не запрещены к индексации в robots.txt.
На странице присутствуют изображения 1.
Показать внутренние ссылки
| Url | Анкор | Состояние | Анализировать |
|---|---|---|---|
| /segments/ |
Datendateien
|
|
Анализировать url |
| /impressum.html |
Impressum
|
|
Анализировать url |
| /datenschutz.html |
Datenschutzerklärung
|
|
Анализировать url |
| /whatsapp://send?text={url} |
<i class="fa fa-whatsapp"></i>
|
|
Внешние ссылки
Кол-во: 16
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 16 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
На странице ссылки с атрибутом rel='nofollow' 1.
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| bikerouter.de |
<span class="fa fa-lg fa-heart-o" aria-hidden="true"></span><span data-i18n="navbar.supporters">Hall of Fame</span>
|
Анализировать url |
| bikerouter.de |
<span data-i18n="navbar.support" class="bikerouter-support">Support ❤️</span>
|
Анализировать url |
| bikerouter.de |
Hall of Fame
|
Анализировать url |
| bikerouter.de |
<span data-i18n="sidebar.card.support.button.support.label">Support</span> <span><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" fill="currentColor" class="icon-heart"><path d="m11.645 20.91-.007-.003-.022-.012a15.247 15.247 0 0 1-.383-.218 25.18 25.18 0 0 1-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0 1 12 5.052 5.5 5.5 0 0 1 16.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 0 1-4.244 3.17 15.247 15.247 0 0 1-.383.219l-.022.012-.007.004-.003.001a.752.752 0 0 1-.704 0l-.003-.001Z"></path></svg></span>
|
Анализировать url |
| docs.bikerouter.de |
Read everything about Route analysis features
|
Анализировать url |
| marcusjaschen.com |
Marcus Jaschen
|
Анализировать url |
| en.osm.town |
@bikerouter@en.osm.town
|
Анализировать url |
| docs.bikerouter.de |
Bikerouter Handbuch 🇩🇪
|
Анализировать url |
| docs.bikerouter.de |
Bikerouter Manual 🇪🇺
|
Анализировать url |
| mtb-news.de |
bikerouter.de Support-Forum
|
Анализировать url |
| github.com |
MIT License
|
Анализировать url |
| github.com |
MIT License
|
Анализировать url |
| openstreetmap.org |
© OpenStreetMap contributors
|
Анализировать url |
| sonny.4lima.de |
Sonny's LiDAR Digital Terrain Models
|
Анализировать url |
| openstreetmap.org |
OpenStreetMap
|
Анализировать url |
| facebook.com |
<i class="fa fa-facebook"></i>
|
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Анализ сайта brouter.m11n.de, слабо оптимизирован на 51%. Для хорошей оптимизации и выхода на первые места в поиске требуется:
Исправьте ошибки в мета-тегах.
Исправьте ошибки оптимизации.
Исправьте ошибки индексации.
Поделитесь с друзьями: