Внизу каждой статьи разместить элемент (или привязаться к уже существующему), и на JS проверять его нахождение во viewport,
если элемент входит во viewport, уведомлять об этом сервер, на кастомный роут.
+ можно дабавить проверку того, сколько пользователь находился на странице (для того чтобы отсеять пролистывание вниз сразу после открытия страницы).
Т.е. если время чтения материала 9 минут (в среднем), убираем 20-30 % (кто-то может и быстрее читать),
и далее совмещаем с проверкой нахождения во viewport.
JavaScript: Is element in viewport?/*
No jQuery necessary.
Thanks to Dan's StackOverflow answer for this:
http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
*/
function isElementInViewport(el) {
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document. documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document. documentElement.clientWidth)
);
}