前言

很多项目的开始都是因为情怀和热爱,“为爱发电”是一件很值得尊敬的事情,然而大量“为爱发电”的项目最后却不得不因”难以为继“而被迫停服。

园子就是很好的案例,它一直以来就是一个很纯粹的技术分享平台,但纯爱是最容易受伤的,不过哪怕是现在逐步探索商业化了,和”牛皮藓“满天飞,看个文章还要登录的某N(不点名,你知道我在说谁)相比,依然是一股清流。

说回本文主题,分享两个我个人开发的内置 Google 广告位的Typecho主题,我希望使用这两款主题搭建网站的同学能够永不停服,所以我一开始就想着把谷歌广告集成进去,虽未必能赚多少钱,但只要持续输出文章、作品,确保站点是活着的,一年下来挣个服务器和域名的费用总还是可以的吧!

1. 展示效果

篇幅有限,主题效果不截图展示,大家可以通过下面各小节中的项目地址详细查看,这里主要介绍 Google Ads 集成的问题,本以为集成 Google Ads 会是一件很简单的事情,最多调一下样式就好了,但结果为了能让广告正常显示,却很费了一些力气,主要就是PJAX这种页面无跳转的技术(也包括VueReact等前端SPA框架)与 Google Ads 存在兼容性问题,本文不谈坎坷的道路,后面单独写一篇文章来记录踩坑过程,这里直接展示一下集成后的效果。

1.1 博客主题

项目地址

https://github.com/ZShijun/WaterDrop

为了兼顾收益和用户体验,我一共为博客主题设置了三个广告位:侧边栏底部,文章页头部和文章页尾部。由于窄屏没有侧边栏,因此,窄屏其实只有两个广告位。

文章页头部效果

文章页尾部效果

侧边栏效果

1.2 导航主题

项目地址

https://github.com/ZShijun/BeaconNav

文章页效果

导航主题实在没什么好的位置,就只在详情页中设置了一个广告位。

怎么样?无论是博客主题,还是导航主题,广告嵌入的都还算和谐,不恶心吧?如果你用了我开发的主题,也赶紧试试吧,蚊子再小也是肉,给自己稍微增加一点创作的动力吧!

2. 如何使用

两个主题的设置方式大同小异,因此我以博客主题为例演示说明。配置方式很简单,我在主题配置页面增加了一个谷歌广告的配置项,如下图所示:

其中,publisher是发布商ID,后面三个可以理解为广告位的编号,都可以直接从 Google Ads 后台获取,如下图所示:

就这么简单,搞定了,至于怎么操作以及原因,我打算后面再写一篇文章来单独解释。

不出意外的话,广告很快就能在你的网站中展现出来了,所以,首要问题还是得先注册一个 Google Ads 账号,心动就赶紧行动起来吧!

3. 鱼和熊掌

如果你不希望你的网站显示广告,主题中的谷歌广告的配置直接空着就行了,不显示广告起码有以下两个优点:

  1. 没有了广告,网站会更纯净一些,用户体验也会好一些,当然,每个广告位都可以单独选择是否投放;
  2. 由于PJAXGoogle Ads 兼容性的问题,接入广告后,向文章内容页的跳转会退化成页面跳转模式,而关闭广告后,又可以恢复原来的 PJAX 路由模式,文章页加载也会快一些。

事实上,上述优点只是理论上的,实际感受未必有那么明显,因为广告并不是每次都显示,也并不是所有广告位都会同时显示。至于性能的变化,访问者也未必会有明显的感受。

总之,不管怎么样,收益和体验,就如同鱼和熊掌,二者不可兼得,总还是需要权衡一下的。

结语

到此并没有结束,后续还要继续观察观察,例如,屏蔽一些在咱们这边比较敏感的广告,并且,事实上,广告展示可能还有BUG,路也没有完全走通,套句名言:这才刚刚开始!

说到这里,为了调试,我这几天几乎每天都会刷新上百次广告,现在都不太敢自己访问自己的网站了,生怕一不小心就被判定违规了,所以测试的可能不太充分,如果你在使用过程中发现新的问题,欢迎留言反馈,我会尽快验证修复。

感兴趣的赶紧去 GitHub 上下载源码安装试试吧!

分享两个内置Google广告位的Typecho主题的更多相关文章

  1. mybatis动态sql中的两个内置参数(_parameter和_databaseId)

    mybatis动态sql中的两个内置参数(_parameter和_databaseId)   <!-- mybatis动态sql的两个内置参数           不只是方法传递过来的参数可以被 ...

  2. Mybatis学习笔记15 - 两个内置参数_parameter和_databaseId

    两个内置参数:除了方法传递过来的参数可以被用来判断,取值外,mybatis默认还有两个内置参数: _parameter:代表整个参数 单个参数:_parameter就代表这个单个参数 多个参数:参数会 ...

  3. Python两个内置函数——locals 和globals (学习笔记)

    这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...

  4. Python两个内置函数locals 和globals

    这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...

  5. SQLServer中DataLength()和Len()两内置函数的区别(转载)

    最近工作中遇到了个问题:在数据库中声明字段类型时char(4),但实际只存储了‘DCE’三个字母,程序中拼装以该字段作为key的Map中,会把‘DCE’+空格作为其Key,这样造成用没加空格的‘DCE ...

  6. SQLServer中DataLength()和Len()两内置函数的区别

    最近工作中遇到了个问题:在数据库中声明字段类型时char(4),但实际只存储了‘DCE’三个字母,程序中拼装以该字段作为key的Map中,会把‘DCE’+空格作为其Key,这样造成用没加空格的‘DCE ...

  7. JavaScript中本地对象、内置对象和宿主对象

    链接:http://www.cnblogs.com/luckyXcc/p/5892896.html(Milk.╮的博客园提供) 其中内置对象只有两种:ECMA-262 只定义了两个内置对象,即 Glo ...

  8. JS 内置对象

    内置对象的定义:有ECMAScript实现提供的.不依赖与宿主环境的对象,在ECMAScript运行之前就已经创建好的对象就叫做内置对象. 就是说,是不需要我们开发人员先是的实例化对象就能够调用和运行 ...

  9. JavaScript本地对象 内置对象 宿主对象

          在ECMAScript中,所有对象并非同等创建的. 一般来说,可以创建并使用的对象有3种:本地对象.内置对象和宿主对象. 1. 本地对象 ECMA-262把本地对象(native obje ...

  10. JavaScript 本地对象、内置对象、宿主对象

    首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...

随机推荐

  1. vue+element设置选择日期最大范围(普通版)

    效果是只能跟当天时间有关(30天),下一篇将来的任意时段,比较符合实际 <!DOCTYPE html> <html> <head> <meta charset ...

  2. 推荐一款轻量级堡垒机系统让你防护“rm -rf 删库跑路”

    大家好,我是 Java陈序员. 我们在开发工作中,会经常与服务器打交道,而服务器的资源又是十分宝贵,特别是服务器里面的数据资源. 但是,偶尔会经常因为疏忽而导致服务器数据资源丢失,给自己和公司带来巨大 ...

  3. 【图形数据集】CIFAR-10 dataset数据集

    文献引用:https://www.cs.toronto.edu/~kriz/cifar.html The CIFAR-10 dataset The CIFAR-10 dataset consists ...

  4. go 操作elasticsearch

    olivere/elastic 包 github.com/olivere/elastic doc: https://pkg.go.dev/github.com/olivere/elastic?utm_ ...

  5. C#.Net筑基-模式匹配汇总

    01.模式匹配概述 从C#7开始支持的 模式匹配 语法(糖,挺甜),可非常灵活的对数据进行条件匹配和提取,经过多个版本的完善,已经非常强大了. C# 支持多种模式,包括声明.类型.常量.关系.属性.列 ...

  6. NumPy 数组迭代与合并详解

    NumPy 数组迭代 NumPy 数组迭代是访问和处理数组元素的重要方法.它允许您逐个或成组地遍历数组元素. 基本迭代 我们可以使用 Python 的基本 for 循环来迭代 NumPy 数组. 一维 ...

  7. AIRIOT答疑第4期|如何使用数据分析引擎?

    灵活报表曲线,满足各类分析需求! AIRIOT物联网低代码平台的数据分析引擎满足各类型数据分类及分析需求,毫秒级数据反馈速度,快速响应客户分析条件变换查询需求.通过机器学习.融合各种计算模型.人工智能 ...

  8. 从Newtonsoft.Json迁移到 System.Text.Json不简单

    一.写在前面# System.Text.Json 是 .NET Core 3 及以上版本内置的 Json 序列化组件,刚推出的时候经常看到踩各种坑的吐槽,现在经过几个版本的迭代优化,提升了易用性,修复 ...

  9. 如何使用Node.js、TypeScript和Express实现RESTful API服务

    Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Express是一个保持最小规模的灵 ...

  10. Typora编写博客并发布

    (1)工具安装:下载博主xhznl开发的的工具,并按照说明进行正确的配置. EasyBlogImageForTypora使用说明:https://www.cnblogs.com/xhznl/p/132 ...