Django. Деплой. Платные хостинги
Введение
К моменту прочтения этого материала я думаю, что вы ознакомлены с блоком посвященному деплою на бесплатных хостингах, поэтому останавливаться подробно на вопросах относящихся к подготовке публикации сайта мы не станем, разумеется если для конкретного хостинга нет индивидуальных особенностей. На момент лета 2022 DigitalOcean имеет некоторые трудности с оплатой для росссийских пользователей, поэтому публикацию сайтов с помощью этого хостинга мы пока опустим, в дальнейшем, если ситуация наладится, возможно будет опубликован материал по публикации с помощью DigitalOcean. На данный момент воспользуемся хостингами REG.RU и Timeweb.
REG.RU. Деплой первого сайта
Предлагаю вам сразу зарегистрироваться на REG.RU, никаких особенной в регистрации нет. После зайдите в личный кабинет.
REG.RU очень богатый на возможности хостинг-провайдер. Тут же на REG.RU вы можете приобрести и домен и хостинг и различные дополнительные услуги. Начнем с покупки домена. Находясь в личном кабинете перейдите во вкладку Домены и нажмите на кнопку заказать.
Сейчас мы займемся деплоем последнего сайта из первого блока посвященного Django. Это был сайт с возможностью регистрации и авторизации, а также с личным кабинетом, в котором можно добавлять записи. Сам проект назывался PyPyLearn, предлагаю зарегистрировать именно такой домен. Иногда желаемые домены и первого и второго уровня могут быть заняты или стоить больших денег, поэтому если вы решили писать проект, который позже планируете опубликовать имеет смысл сразу проверить наличие подходящего домена для вашего сайта.
pypylearn.ru оказался совободен, цены на домены совсем небольшие.
На следующей странице вы можете приобрести дополнительные опции, на каждую из них вы можете нажать и ознакомиться. Поскольку этот сайт публикуется только для демонстрации процесса я приобрету голый домен, но если вы планируете публиковать сайт и заниматься его развитием, то рекомендую внимательно ознакомиться с доп. услугами.
Хостинг на 3 месяца хорошее предложение, но предварительно можно ознакомиться с тарифами. Host-0, который предлагается при приобретении домена имеет оптимальные характеристики, если вы только пробуете размещать проекты в интернете. Если вы приобретаете хостинг отдельно, то на странице покупки вам также предложат доп.услуги, с которыми рекомендую вам также ознакомиться.
Итак, хостинг с доменом у нас есть, теперь мы можем разместить домен на нашем хостинге. Также после их приобретения вас попросят привязать домен и хостинг к вашему контакту, но в этом тоже нет ничего трудного, все интуитивно понятно.
Теперь можно перейти во вкладку хостинги, открыть нужный вам и привязать к нему приобретенный домен.
Делается это с помощью этой кнопки, после нажатия откроется окно где нужно будет выбрать один или несколько из ваших доменов. После привязки можно уже перейти к настройке самого сайта.
Для этого нужно перейти в Панель управления, в ней мы и будем производить все необходимые настройки.
Запуск пустого django проекта
Для тренировки у REG.RU есть хорошая инструкция по установке django на хостинг. В ней все понятно и подробно описано, рекомендую ознакомиться с ней и следовать ее пунктам. Но и тут мы кратенько пробежимся по ее пунктам, а также расскажу вам с какой я столкнулся трудностью, когда первый раз пытался поставить django на хостинг.
Панель управления выглядит следующим образом.
В инструкции вам предложат воспользоваться встроенным редактором vim для редактирования файлов, я лично не очень люблю этот редактор, вы можете редактировать файлы через Менеджер файлов, как по мне это куда удобнее.
Далее, в инструкции вам будет предложено подключиться к хостингу по SSH, вы можете использовать встроенный Shell-клиент, вместо постоянного подключения по SSH через консоль.
Теперь по говорим о том какая проблема возникла у меня при первой попытке установки django на хостинг. Путь в корневой директории должен вести до папки, в которой находится файл manage.py, в противном случае вы будете получать сообщение, что не найден файл index.html или index.php, поскольку перед созданием нового проекта все файлы и папки из папки, куда вы хотите устанавливать проект, вам нужно будет удалить. Это единственный момент, на который я обратил внимание не сразу. Дело в том, что если вы создаете новый сайт в Панели управления с помощью кнопки Создать сайт, вам предложат указать корневую директорию, а когда вы зайдете в эту панель впервые первый преднастроенный сайт под ваш домен с путем корневой директории уже будет создан, обратите внимание на этот момент.
Вы можете удалить сайт, который будет в Панели управления по умолчанию и создать свой. Там нет ничего трудного, имя - домен первого и второго уровня, остальные пункты заполняться автоматически, опять же обратите внимание на корневую директорию. Ниже включите CGI-скрипты и Python, выбрав нужную версию языка, с остальными настройками также можете ознакомиться и включить необходимые.
Сайт создан, теперь можно войти в Shell-клиент, напоминаю
ls - посмотреть папки в текущей директории
pwd - полный путь до текущей директории
cd (имя папки) - перейти в нужную папку
cd .. - спуститься на папку ниже уровнем
этих команд вам хватить для полной навигации по структуре вашего проекта.
Первым делом от нас конечно требуется создать виртуальное окружение и активировать его, делать стоит в корневой папке, на уровне с etc, logs и так далее.
После этого перейдите в папку проекта по пути www/(имя сайта) и создайте там новый проект, стандартно командой django-admin statproject (название).
Все эти пункты, со всеми командами есть в инструкции, мы просто их проговариваем еще раз.
Теперь можно перейти к редактированию settings.py.
В ALLOWED_HOSTS добавляем Имя и Псевдонимы указанные при создании сайта, добавить STATIC_ROOT='static/' и заполнить данные для БД. Пока воспользуемся MySQL, в Панели управления есть вкладка Базы данных, где можно увидеть все необходимые данные для settings.py, вы можете создать свою БД, а можете воспользоваться той, что будет по умолчанию.
Далее стандартные команды python manage.py collectstatic, python manage.py migrate и python manage.py createsuperuser.
И последним пунктом будет создание файла passenger_wsgi.py, создайте его там же, где находится файл manage.py, создавать файлы можно также через Менеджер файлов. Возьмите преднастроенные заготовки из инструкции и замените пути в соответствии с вашими.
sys.path.insert(0 ...) должен содержать путь до файла manage.py.
sys.path.insert(1 ...) должен содержать вашу версию python, которую вы выбрали при создании сайта и название вашего виртуального окружения.
os.environ['DJANGO_SETTINGS_MODULE'] - путь до файла setting.py относительно sys.path.insert(0 ...) через точечную нотацию, структура напоминает настройки WSGI файла для PythonAnywhere, которые мы делали в прошлом блоке посвященному деплою.
Все, если вы все сделали правильно при переходе по вашему домену вы увидите стартовую страницу голого Django проекта. Если ракета не появилась, перепроверьте путь в корневой директории, settings.py и passenger_wsgi.py.
В папке logs будут храниться все логи, в случае ошибок можете поискать информацию там, также вы можете обратиться в их службу поддержки, они достаточно оперативно и подробно отвечают на вопросы.
С установкой голого django проекта разобрались, теперь можем загружать наш готовый django проект.
Установка django проекта с github
В установке Django проекта на хостинг с github тоже нет ничего трудного, правда я застрял на несколько часов из-за того, что я решил полностью переустановить сайт и в снова созданном файле passenger_wsgi.py забыл заменить в путях идентификатор тестового пользователя на свой и не замечал этого в упор. Если у вас что-то не получается, перепроверьте этот момент, иногда проблема скрывается на самом видном месте, но из-за того что вы пытаетесь найти проблему где-то глубже про самые очевидные моменты вы забываете.
У REG.RU есть инструкция по работе с git, воспользуемся ей.
Итак, начать стоит с того что у вас уже должен лежать готовый проект на github. Репозиторий сайта, который я хочу загрузить на REG.RU у меня называется точно также, как итоговая папка корневой директории сайта.
Поскольку склонировання папка называется по названию репозитория никаких конфликтов имен у нас не возникнет, но в любом случае папку проекта всегда можно просто переименовать.
Теперь эту папку с пустым django проектом, установленным нами в прошлом пункте следует полностью удалить. Переда удалением вы можете сохранить себе данные из файла passenger_wsgi.py и изменения из settings.py, чтобы повторно их не заполнять.
Теперь переходим в shell-клиент, включаем виртуальное окружение и переходим в папку вашей корневой директории уровнем ниже, чем итоговая папка корневой директории. Обращаясь к скриншоту выше, если мы хотим склонировать проект с названием pythonpackagelearn с github, то клонировать его стоит в папку pypylearn.ru.
Находясь в нужной папке мы теперь можем воспользоваться командой git clone (ссылка проекта с github).
Готово, теперь в нашей корневой директории лежит проект с github. Осталось заменить информацию в settings.py и добавить файл passenger_wsgi.py. Также, следует установить нужные библиотеки командой pip install -r requirements.txt. БД можно использовать новую, а можно очистить старую и воспользоваться ей, это абсолютно не принципиально. Про сбор статики, миграции и создание суперпользователя тоже не забывайте.
Теперь вы можете перейти по адресу своего сайта или открыть его через ispmanager и если все сделано правильно, то перед вами откроется ваш сайт. Согласитесь, совсем не сложно.
Обновление изменений на сайте
Скорее всего со временем ваш сайт будет обновляться, это муг быть как мелкие изменения, так и крупные. Какие варианты у нас есть для перезапуска проекта с целью применения изменений?
Если вы внесли мелкие изменения на свой сайт, например, вам нужно временно переключит режим DEBUG или вам нужно добавить временное предупреждение о каком-то событии на главной странице вашего сайта. Допустим эта информация не подтягивается из БД, а просто добавляется внутрь html файла страницы и спустя время будет удалена. Для подобных изменений зайдите в Менеджер файлов, выберете нужный файл, внесите изменения и нажмите Сохранить. Если теперь перейти на сайт этих изменений вы не увидите, потому что проект еще не перезагружен.
Для перезагрузки перейдите в корневую директорию вашего проекта и с помощью кнопки Создать добавьте файл .restar-app и нажмите Ок. После этого файл .restar-app появится в вашей корневой директории. Раз в минуту в любом проекте отрабатывает CRON и если он видит в корне проекта этот файл, то проект перезагружается и файл .restar-app удаляется. Теперь, если перейти на сайт внесенные изменения будут видны.
Если вы внесли в проект какие-то более глобальные изменения на локальной версии проекта и хотите применить для опубликованной версии, то вы конечно можете внести все изменения вручную через Менеджер файлов, но вероятность, что вы что-то упустите сильно возрастает. Для того чтобы обезопасить себя, лучшим решением будет отправка изменений на github, а после через Shell-клиент отправить их на хостинг. Для этого зайдите через shell-клиент в папку проекта и воспользуйтесь командой git pull для синхронизации изменений. После этого без всяких перезагрузок проекта изменения уже будут видны на опубликованном сайте.
Так же не забывайте синхронизировать изменения, если вы меняете их и на локальной версии и на хостинге, поскольку если не следить за этим с последующими коммитами могу возникнуть трудности из-за несоответствия данных в локальных файлах и файлах хостинга. Если же подобная ситуация возникла вы можете 'отложить' изменения командой git stash.
Последне, о чем хотелось бы упомянуть. Не забывайте обновлять ваш .json файл, в который выгружена БД, это можно делать знакомой командой dumpdata или через интерфейс ispmanager, во вкладе Базы данных вы можете выбрать необходимую и с помощью кнопки Дамп сверху страницы экспортировать или импортировать вашу БД. Это нужно для сохранности информации, поскольку иногда после git pull вам будет необходимо повторно произвести миграции, а после загрузить в БД ваши ранее добавленные в нее данные.
REG.RU. Деплой второго сайта
Остался еще один незадействованный сайт, сайт-библиотека, который мы писали во втором блоке по django. Чем примечателен этот сайт? Его авторизация реализована через django-allauth, где сразу включена аутентификация по email, так что при деплое этого сайта разберемся с подключением почты средствами REG.RU и обсудим некоторые моменты связанные с SEO. Начнем традиционно с предварительных настроек хостинга и клонирования проекта с github.
Давайте еще раз поэтапоно распишу весь процесс от покупки хостинга до загрузки проекта на этот хостинг.
1. Начинается все с покупки домена и раз это не первый сайт, о котором мы говорим, то посчитаем, что хостинг у вас уже есть. Когда я покупал домен pypylearn.ru REG.RU предложил один бесплатный домен зоны .site, не знаю временная это акция или постоянна, есть подозрение, что все-таки постоянная. Поэтому я воспользовался этим приложением и зарегистрировал домен pylibrary.site. После этого вы заходите во вкладу Хостинги и привязываете к нему новый домен.
2. Дальше заходим в Панель управления (ISPmanager). После привязки домена к сайту, во вкладке сайты автоматически регистрируется новый сайт с именем вашего домена и путем /www/(имя домена), /www/pylibrary.site в моем случае. Я этот автоматически созданный сайт удаляю и создаю новый. Имя pylibrary.site, остальные данные после введения имени заполняются автоматически. В корневой директории я добавляю /(имя проекта на github), таким образом корневой путь в моем случае становится /www/pylibrary.site/pylibrary, в разделе дополнительные возможности отключаю PHP и php.ini для домена и включаю CGI-скрипты и Python в самой последней из доступных версий. Нажимаю ОК. Сайт создан. В менеджере файлов появился путь /www/pylibrary.site/pylibrary/.
3. Всю папку pylibrary нужно удалить, поскольку на ее место мы склонируем проект с github с таким же названием. Открываем Shell-клиент и создаем под этот проект новое виртуальное окружение, разумеется с названием отличного от первого.
/opt/python/python-3.9.0/bin/python -m venv env
Например так.
Активируем и используем следующую команду из официальной инструкции REG.RU, пункт 8.
pip install --upgrade pip && pip install django && CFLAGS="-std=c99" pip install mysqlclient
4. Перейдем во вкладку Базы данных и создадим новую БД для нашего проекта. Например, pylibrary, префикс (логин ispmanager)_ подставится автоматически. Пользователя можно создать нового или можно выбрать уже существующего. NAME - имя БД, USER - имя пользователя, выбранного для этой БД, PASSWORD - пароль этого пользователя.
5. Теперь можем склонировать проект с github и произвести необходимые для запуска настройки. Подразумеваю, что проект у вас на сайте уже есть, если нет, то можете потренироваться на этом коммите. Заходим в Shell-клиент, запускаем venv, переходим в папку /www/pylibrary.site/. Используем команду
git clone https://github.com/IlyaTsarkov/pylibrary.git
Готово, файлы сайта лежат в директории /www/pylibrary.site/pylibrary/.
6. В файле settings.py производим следующие изменения.
... DEBUG = False ALLOWED_HOSTS = ['pylibrary.site', 'www.pylibrary.site'] ... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '(имя БД)', 'USER': '(имя пользователя)', 'PASSWORD': '(пароль пользователя)', 'HOST': 'localhost', } } ... STATIC_URL = 'static/' STATIC_ROOT='static/' ...
7. Через Shell-клиент, находясь в папке с файлом manage.py используем команды
pip install -r requerments.txt
python manage.py collectstatic
python manage.py migrate
python manage.py createsuperuser
8. Добавляем на уровне с файлом manage.py файл passenger_wsgi.py со следующим содержанием.
import os, sys sys.path.insert(0, '/var/www/u1724262/data/www/pylibrary.site/pylibrary') sys.path.insert(1, '/var/www/u1724262/data/env/lib/python3.9/site-packages') os.environ['DJANGO_SETTINGS_MODULE'] = 'pylibrary.settings' from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
Как правильно описать каждый путь написано выше, либо вы можете заглянуть в инструкцию REG.RU, пункты 14-17.
9. Если вы все сделали правильно, то перейдя по домену вы увидите на нем ваш сайт. Правда, если у вас были записи в БД сейчас на сайте вы их не увидите. Для того чтобы загрузить записи из старой БД в новую нужно воспользоваться следующими командами.
находясь в локальной версии вашего проекта воспользуйтесь командой
python manage.py dumpdata > (название, например, mydata).json
Положите этот файл на одном с уровнем с файлом manage.py через Менеджер файлов уже вашего развернутого проекта. И через Shell-клиент, находясь в папке с этим файлом воспользуйтесь командой
python manage.py loaddata (название, например, mydata).json
Теперь перейдя на сайт, вы увидите, что все записи из БД подтянулись. Разумеется, если вы не писали этот проект и просто воспользовались репозиторием с github, то БД у вас будет пустая и взять записи для нее будет негде, поскольку на github файл db.sqlite3 не заливается. В таком случае вы можете наполнять сайт через админку.
Таким образом происходит деплой сайта с помощью REG.RU, но все это мы уже с вами делали, теперь перейдем к тому, о чем ранее мы еще не разговаривали.
REG.RU. Подключение почты
REG.RU предоставляет возможность использовать почтовый клиент RoundCube, сейчас в settings.py для почты используется настройка
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Которая говорит, что для имитации отправки почты используется консоль, поэтому если сейчас попытаться на сайте сбросить пароль, то мы не увидим ошибки, а увидим сообщение, что письмо для сброса пароля успешно отправлено на почтовый адрес. Но соответственно, если изменить настройки с консоли на реальный почтовый клиент, то попытки отправки почты будут завершаться ошибкой, поскольку настройки для почты не указаны.
Для создания почты перейдите в раздел Почта ispmanager'а и нажмите Почтовые домены - Создать почтовый домен.
Имя должно совпадать с доменом сайта, с доп. настройками вы можете ознакомиться самостоятельно и подключить необходимые. Все эти технологии используются для фильтрации спама, фишинговых писем и прочих неприятных рассылок.
После этого вернемся в раздел Почта и нажмем Создать ящик.
Имя в данном случае может быть любым.
Для того чтобы посмотреть необходимые настройки для settings.py, находясь в разделе Почта, там в разделе ручная настройка написаны ваши порты и прочие данные.
Разобравшись с этим, мы можем перейти в settings.py и прописать необходимые настройки.
EMAIL_HOST = 'mail.hosting.reg.ru' EMAIL_HOST_USER = 'pylibrary@pylibrary.site' EMAIL_HOST_PASSWORD = '(пароль почтового ящика)' EMAIL_USE_TLS = True EMAIL_PORT = 587 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Получиться должно примерно следующее. EMAIL_HOST у вас будет точно такой же, EMAIL_HOST_USER и EMAIL_HOST_PASSWORD берутся из раздела Почта.
EMAIL_USE_TLS и EMAIL_PORT настройки защищенной передачи данных, обратите внимание SSL REG.RU использует 587, а не 465 порт.
DEFAULT_FROM_EMAIL адрес по умолчанию.
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' заменяем console на smtp.
Создайте в корневой папке файл .restart-app и подождите пока он удалиться, чтобы проект перезагрузился и настройки вступили в силу.
После перезагрузки почтовый клиент должен заработать. При попытке сброса пароля на pylibrary.site мне на указанную почту пришло такое письмо.
Для того чтобы вместо [127.0.0.1:8000] использовать имя сайта, перейдите в админку и в таблице Сайты, замените локальный адрес на домен сайта.
А вот изменить имя и изображения отправителя письма не выйдет, поскольку почтовый клиент RoundCube не поддерживает смену отображение вашего имени или изображения. Для подобных настроек придется воспользоваться другими почтовыми сервисами, например, Yandex.
Введение в SEO
SEO - поисковая оптимизация. После успешной публикации сайта следует заняться его SEO. Как минимум необходимо, чтобы сайт появлялся в поисковых выдачах google и yandex. Для добавления сайта в поисковые выдачи yandex используется Яндекс Вебмастер, а для google - Google Search Console. Создайте аккаунты в двух этих сервисах.
У REG.RU также есть инструкция как добавить сайт в поиск. Воспользуйтесь ей, там все подробно и понятно описано. Правда REG.RU рекомендуют добавлять DNS-запись для связи с Яндекс Вебмастер, по мне проще использовать Метатег, который следует просто разместить в head вашего сайта.
Подключение сайтов к этим сервисам может занять время, как и вся индексация, так что тут остается просто набраться терпения.
После добавления сайта в эти сервисы роботы google и yandex начнут периодически их посещать и каждый из сервисов будет присылать вам уведомления, если на вашем сайте обнаружены какие-то проблемы, мешающие его оптимизации и рекомендации по их устранению. Давайте некоторые возможные проблемы обсудим заранее.
sitemap.xml и robots.txt
Если вы хотите, чтоб ваш сайт лучше индексировался, на нем обязаны быть файлы robots.txt и sitemap.xml, которые должны открываться по адресу https://(домен)/robots.txt и https://(домен)/sitemap.xml соответственно.
robots.txt подсказывает обходящим сайты роботам, какие страницы стоит исключить для индексации и соответственно не тратить на них время, путь до Sitemap, чтобы робот ориентировался еще быстрее, User-agent, Host и еще некоторые возможности.
Добавить этот файл к проекту достаточно прост, создайте в корневой папке templates (корневой будет являться та, что указана в TEMPLATES файла settings.py) файл robots.txt. Например такого содержания.
User-agent: * Allow: / Host: https://pylibrary.site/ Sitemap: https://pylibrary.site/sitemap.xml
User-agent: * - любой user-agent
Allow: / - в настройке Allow указываются разрешенные для обхода адреса, адреса которые наоборот необходимо исключить указываются в настройке Disallow
Host: https://pylibrary.site/ - главное зеркало сайта
Sitemap: https://pylibrary.site/sitemap.xml - путь до sitemap
robots.txt готов, осталось подключить его к проекту. Делается в главном файле urls.py вашего проекта.
... from django.views.generic.base import TemplateView ... urlpatterns = [ ... path('robots.txt', TemplateView.as_view(template_name='robots.txt', content_type='text/plain')), ... ]
Импортируем TemplateView и записываем там имя 'robots.txt', метод найдет этот файл в главной папке templates и в случае, если он там есть по адресу сайт/robots.txt откроется файл с записанной в него нами информацией.
С sitemap.xml дела чуть посложнее, но django имеет встроенный The sitemap framework, которым мы и воспользуемся. Начнем с settings.py.
INSTALLED_APPS = [
...
'django.contrib.sitemaps',
...
]
Нужно добавить django.contrib.sitemaps в установленные приложения.
Далее в папке приложения создайте файл sitemaps.py, внутри него мы как раз и будем прописывать какие адреса мы будем использовать.
from django.contrib.sitemaps import Sitemap from .models import * class BookSitemap(Sitemap): changefreq = 'weekly' priority = 1.0 def items(self): return Book.objects.all() class CategorySitemap(Sitemap): changefreq = 'monthly' priority = 0.9 def items(self): return Category.objects.all()
Для каждой модели пишется отдельный Sitemap class, формата имя моделиSitemat. Этот класс должен содержать один обязательный метод items, внутри которого мы говорим какие записи из модели мы хотим забрать. Заберем все, но можно разумеется пользоваться различными фильтрами. Обратите внимание, класс Sitemap будет работать только для тех моделей, у которых прописан метод get_absolute_url. Категорий и самих книг для Sitemap будет вполне достаточно.
changefreq = '(always/.../never)' - настройка, содержащая теоретическую частоту изменений данной страницы. От всегда, до никогда.
priority = (от 0.0 до 1.0) - приоритетность URL относительно остальных URL.
Существует еще один необязательный метод - lastmod. Он выводит информацию из поля типа дата, тем самым храня в себе информацию о последнем изменении. Принимает два параметра def lastmod(self, obj), где obj - модель и возвращает return obj.(название поля, хранящего информацию о дате изменения).
Теперь эти классы нужно собрать воедино, чтобы по адресу /sitemap.xml была информация об адресах всех выбранных моделей.
... from book.sitemaps import * from django.contrib.sitemaps.views import sitemap sitemaps = { 'books': BookSitemap, 'category': CategorySitemap, } urlpatterns = [ ... path('sitemap.xml', sitemap, {'sitemaps': sitemaps}), ]
В urls.py создадим словарь sitemaps, куда сложим sitemap классы из файла sitemaps.py, ключом для каждого класса будет логически соответствующее модели имя. И добавим путь до файла sitemap.xml, где вторым параметром будет sitemap из django.contrib.sitemaps.views, который преобразует эти классы к необходимому виду. Создавать файл sitemap.xml вручную, при этом не нужно, по адресу он сгенерируется самостоятельно.
Если вы все написали верно, то по адресу https://(домен)/sitemap.xml вы увидите примерно следующее.
Как видно, создать sitemap.xml и robots.txt не составляет большого труда и лучше, если вы собрались публиковать сайт, которые вы планируете как либо продвигать, не затягивать с созданием этих файлов. Что Яндекс Вебмастер, что Google Search Console будут постоянно жаловаться вам на ваш сайт, говоря об отсутствии данных файлов.
Что еще необходимо для индексации сайта? Добавьте на сайт yandex и google аналитику, там совсем все просто. Зарегистрируйтесь на данных сервисах и сгенерируйте код вашего счетчика, сервисы сами проведут по всем шагам, там все интуитивно понятно, и разместите эти фрагменты кода в теге head.
Добавьте в том же теге head метатег description, в котором будет краткое описание ваших страниц, информация их этого тега это краткое описание, которое вы видите у сайтов в поисковой выдаче.
В любом случае Яндекс Вебмастер и Google Search Console подскажут вам об ошибках вашего сайта, если таковые имеются.
Для отправки комментария необходимо авторизоваться
Комментарии
Здесь пока ничего нет...