Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Создание sitemap с пагинацией и генерация элементов robots.txt
Введение
В этой статье разберем как создать постраничный sitemap, который хранится статично в таблице БД (это лучше чем делать тяжелую генерацию всех страниц на лету).
Есть пакет SQL с кодом editorPages_seo, который содержит все необходимые изменения по генерации sitemap и robots (в панели управления это будет страница /seo).
Генерация Sitemap
Таблица БД для sitemap - as_sitemap(loc, lastmod, changefreq, priority, updated)
Есть процедура falcon_sitemap, которая генерирует состав sitemap (она чистит as_sitemap и потом записывает новые строки в sitemap). Примеры процедуры:
CREATE PROCEDURE [dbo].[falcon_sitemap]
@parameters DictionaryParameter READONLY, -- as_domain - передача домена
@s nvarchar(max) output
AS
BEGIN
declare @result table(loc nvarchar(max) ,lastmod date, changefreq nvarchar(24) , priority nvarchar(10) )
insert into @result
SELECT top 1000
iif(code='_default', '', '/'+code) loc,
modified lastmod,
'monthly' changefreq,
'0.8' priority
FROM pg_pages
WHERE isInMenu = 1 AND role = 'all' or code='_default'
insert into @result
SELECT top 1000
'/'+ code loc,
modified lastmod,
'monthly' changefreq,
'0.1' priority
FROM pg_pages
WHERE code<>'_default'
delete from as_sitemap
insert into as_sitemap(loc, lastmod, changefreq, priority, updated)
select loc, lastmod, changefreq, priority, getdate()
from @result
set @s=''
END
Есть форма-кнопка generatesitemap, которая пересобирает sitemap. Ее saveItem:
CREATE PROCEDURE [dbo].[fm_generatesitemap_saveItem]
@username nvarchar(256),
@itemID int,
@parameters ExtendedDictionaryParameter readonly
AS
BEGIN
declare @s nvarchar(max) = ''
declare @ps DictionaryParameter
insert into @ps ([Key], Value)
select 'as_domain', Value2 from @parameters where [key]='domain'
exec falcon_sitemap @parameters = @ps, @s = @s output
declare @cnt int = isnull((select count(*) from as_sitemap),0)
-- SELECT 1
select 1 Result, 'Sitemap сгенерирован ('+cast(@cnt as nvarchar)+' шт.)' Msg, '' SuccessUrl, 1 HideFormAfterSubmit, '' RefreshContainer, 1 EnableSaveAlert
END
Сама генерация sitemap.xml происходит на /rsfiletypes, где для типа sitemap надо реализовать такую процедуру:
CREATE PROCEDURE [dbo].[rs_sitemap_getFile]
@urlParameters DictionaryParameter READONLY,
@username nvarchar(32),
@langID int = 0
AS
BEGIN
declare @domain nvarchar(128) = (select Value from @urlParameters where [Key] = 'as_domain')
declare @page int = isnull((select try_cast(Value as int) from @urlParameters where [Key] = 'page'), 1)
declare @pageSize int = try_cast(dbo.as_setting('sitemappagesize', '10') as int)
declare @s nvarchar(max)
set @s = '';
set @s = Replace(@s + (select 'https://'+@domain+ loc loc, convert(nvarchar(10), lastmod, 120) lastmod, changefreq, priority
from (select * from as_sitemap
order by id
OFFSET @PageSize * (@Page - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY
) t1
FOR XML RAW ('url'),
ROOT ('urlset'), ELEMENTS),
'', '')
select top 1 1 Result, '' Msg, @s Text, 'text/xml' MimeType from as_settings where code='sitemap.xml'
END
Настройка sitemappagesize указывает сколько на 1 странице sitemap может быть записей (ВАЖНО - в robots будет также указаны все ссылки на страницы sitemap).
Настройка robots.txt
У robots.txt есть статичная и динамическая часть. Статичная часть заполняется через настройку с кодом robots.txt.
Чтобы в robots.txt была добавка host и страниц сайтмапа, необходимо настройку robotsAddHostSitemap установить в 1.
В /rsfiletypes для кода robots реализуем процедуру вывода robots:
CREATE PROCEDURE [dbo].[rs_robots_getFile]
@urlParameters DictionaryParameter READONLY,
@username nvarchar(32),
@langID int = 0
AS
BEGIN
declare @domain nvarchar(128) = (select Value from @urlParameters where [Key] = 'as_domain')
declare @s nvarchar(max) = isnull((select top 1 Value from as_settings where code='robots.txt'), '')
declare @robotsAddHostSitemap bit = iif(dbo.as_setting('robotsAddHostSitemap', '0')='1', 1, 0)
if(@robotsAddHostSitemap=1) begin
set @s = @s + char(10) + 'Host: https://' + @domain + char(10)
declare @total int = isnull((select count(*) from as_sitemap), 0)
declare @sitemapPageSize int = isnull(try_cast(dbo.as_setting('sitemappagesize', '10') as int), 0)
if(@total>0 and @sitemapPageSize>0) begin
declare @i int = 0, @pages float = @total / cast(@sitemapPageSize as float)
while (@i<=@pages) begin
set @s = @s + char(10) + 'Sitemap: https://' + @domain +'/sitemap.xml' + iif(@i+1>1, '?page='+ cast((@i+1) as nvarchar), '')
set @i = @i + 1
end
end
end
select 1 Result, '' Msg, @s Text, 'text/plain' MimeType
END
Берем статичную часть и добавляем к ней директиву Host и список всех страниц sitemap.
После всех настроек проверяем как работают адреса /stemap.xml и /robots.txt (в URL rewrite должны быть правила для подмены адреса - https://pastebin.com/T9r2rafK).
Google поиск по нашей документации
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта