MVC View News计数器和Google Analytics之间存在巨大差异

Pat*_*ick 1 asp.net-mvc google-analytics

我有一个计数器来计算视图的显示次数:

public class News
{
    [Key]
    public int Id { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DatePostedOn { get; set; }
    public DateTime DateModified { get; set; }  
    public string Title { get; set; }
    public string Description { get; set; }
    public string Meta { get; set; }
    public string UrlSlug { get; set; }
    public bool Popular { get; set; }
    public int Position { get; set; }
    public int Views { get; set; }         // <---- COUNTER
}
Run Code Online (Sandbox Code Playgroud)

每次加载页面时,我都会看到+1:

public virtual ActionResult Detail(string urlSlug)
{
    News news = db.News
                    .Include("Category")
                    .Where(n => n.UrlSlug.Equals(urlSlug))
                    .FirstOrDefault();

    NewsDetailVM vm = Mapper.Map<News, NewsDetailVM>(news);

    vm.RelatedNews = db.News
                        .Where(r => r.Category.Id == news.Category.Id)
                        .Where(r => r.Hidden == false)
                        .Where(r => r.Id != news.Id)
                        .OrderByDescending(r => r.DateCreated)
                        .Take(3)
                        .Select(r => new NewsRelatedVM()
                        {
                            Title = r.Title,
                            Date = r.DateCreated,
                            UrlSlug = r.UrlSlug,
                            CategoryName = r.Category.Name,
                            CategoryURLSlug = r.Category.UrlSlug,
                            PictureURL = r.Pictures.Where(p => p.Type == 2).FirstOrDefault().Filename
                        })
                        .ToList();

    vm.CategoriesList = db.Categories
                        .Where(c => c.Channel == 1)
                        .Project().To<NewsListCategoryItemVM>()
                        .ToList();

    news.Views = news.Views + 1;    // <-- COUNTER UPDATE

    db.SaveChanges();

    return View(vm);
}
Run Code Online (Sandbox Code Playgroud)

问题是,例如在星期六,当天发布的新闻有6464,Google分析为新闻控制器提供了2359次综合浏览量.

从哪里来的这种差异?我在柜台做错了吗?

Chr*_*att 7

几乎不可能说出这种差异的确切原因是什么,但有一些可能是罪魁祸首.首先,GA可能会忽略机器人,特别是GoogleBot.但是,您的方法不会将机器人索引到您的网站.例如,每次GoogleBot点击此视图时,它都会在数据库中递增,但不会在GA中递增.您需要通过蜘蛛将该视图排除在访问之外,或者找到一些方法来过滤掉机器人的请求.

其次,GA可能会过滤掉重复的匹配.例如,假设用户登陆视图,然后点击刷新按钮50次.您的数据库计数增加了50倍,但GA可能仍将其视为单个网页浏览.一般情况下,您应该通过记录REMOTE_IP来限制计数器,并且只在该IP未在15分钟的某个时间段内访问该页面时才递增.然后,你至少不会记录每次刷新.

最后,在这种情况下,计数将始终处于关闭状态,因为并非每个客户端都支持或启用了JavaScript(意味着GA无法跟踪这些客户端),并且客户端的隐私设置也可能会阻止GA跟踪.然而,无论您是否需要,此数据库计数都将计算每个请求.