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次综合浏览量.
从哪里来的这种差异?我在柜台做错了吗?
几乎不可能说出这种差异的确切原因是什么,但有一些可能是罪魁祸首.首先,GA可能会忽略机器人,特别是GoogleBot.但是,您的方法不会将机器人索引到您的网站.例如,每次GoogleBot点击此视图时,它都会在数据库中递增,但不会在GA中递增.您需要通过蜘蛛将该视图排除在访问之外,或者找到一些方法来过滤掉机器人的请求.
其次,GA可能会过滤掉重复的匹配.例如,假设用户登陆视图,然后点击刷新按钮50次.您的数据库计数增加了50倍,但GA可能仍将其视为单个网页浏览.一般情况下,您应该通过记录REMOTE_IP来限制计数器,并且只在该IP未在15分钟的某个时间段内访问该页面时才递增.然后,你至少不会记录每次刷新.
最后,在这种情况下,计数将始终处于关闭状态,因为并非每个客户端都支持或启用了JavaScript(意味着GA无法跟踪这些客户端),并且客户端的隐私设置也可能会阻止GA跟踪.然而,无论您是否需要,此数据库计数都将计算每个请求.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |