Пример задачи: на битриксе без веб аналитики регистрировать страницы 404. Это обычно либо ошибочные ссылки на картинки, либо переходы с внешних источников на изменённые разделы. В первом случае надо вносить исправления (может сказаться на производительности, упоминал об этом в конце ), во втором - ставить редиректы.
[spoiler]
Самое очевидное, что приходит на ум - добавлять записи в инфоблок со страницы /404.php. При этом важно не создавать дополнительную нагрузку, а значит надо использовать кеширование.
Оформил решение в виде компонента, который надо поместить на указанную страницу.

Здесь выбираем инфоблок, в который будут добавляться записи, также по желанию включаем опцию "Не фиксировать переходы повторно" чтобы не добавлялись те же несуществующие страницы вновь.
Код компонента
В качестве названия фиксируется имя несуществующей страницы, а для описания - страница, с которой пришли.
Скопировал компонент news.detail, удалил всё лишнее, результат можно скачать .
Архив распаковываем в /bitrix/components/custom, подключаем, например, так:
[spoiler]
Самое очевидное, что приходит на ум - добавлять записи в инфоблок со страницы /404.php. При этом важно не создавать дополнительную нагрузку, а значит надо использовать кеширование.
Оформил решение в виде компонента, который надо поместить на указанную страницу.

Здесь выбираем инфоблок, в который будут добавляться записи, также по желанию включаем опцию "Не фиксировать переходы повторно" чтобы не добавлялись те же несуществующие страницы вновь.
Код компонента
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if(!isset($arParams["CACHE_TIME"]))
$arParams["CACHE_TIME"] = 3600;
$arParams["IBLOCK_ID"] = intval($arParams["IBLOCK_ID"]);
if ($ar = parse_url($_SERVER['REQUEST_URI']))
$strUri = $ar['host'].$ar['path'];
else
return;
if($arParams['CHECK_UNIQUE'] != 'Y' || $this->StartResultCache(false, array($strUri)))
{
if(!CModule::IncludeModule("iblock"))
{
$this->AbortResultCache();
ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
return;
}
$arFilter = array(
"IBLOCK_ID" => $arParams['IBLOCK_ID'],
"NAME" => $strUri,
);
$arSelect = array("ID");
if ($arParams['CHECK_UNIQUE'] == 'Y')
$rsElement = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
if ($arParams['CHECK_UNIQUE'] != 'Y' || !$rsElement->Fetch())
{
$arFields = $arFilter;
$arFields['PREVIEW_TEXT'] = $_SERVER["HTTP_REFERER"];
$arFields['DATE_ACTIVE_FROM'] = ConvertTimeStamp(time(), 'FULL');
$ob = new CIBlockElement;
$ID = $ob->Add($arFields);
}
$this->EndResultCache();
}
|
В качестве названия фиксируется имя несуществующей страницы, а для описания - страница, с которой пришли.
Скопировал компонент news.detail, удалил всё лишнее, результат можно скачать .
Архив распаковываем в /bitrix/components/custom, подключаем, например, так:
| $APPLICATION->IncludeComponent("custom:log.uri", "", array( "IBLOCK_TYPE" => "feedback", "IBLOCK_ID" => "24", "CHECK_UNIQUE" => "Y", "CACHE_TYPE" => "A", "CACHE_TIME" => "86400" ), false ); |

Кол-во просмотров находиться в той же таблице что и ID элемента, поэтому разницы нет в свою или в b_iblock_element писать. Думаю каждый сделает считает правильнее, все решения хороши