hexo的next主题自定义css
我相信,梦里能到达的地方,总有一天,脚步也能到达。
css文件位置
hexo\blog\themes\next\source\css\_custom\custom.styl
1 | // Custom styles. |
图片文件位置
hexo\blog\themes\next\source\images
可以在该目录下添加主题所需要的图片
如果上传不生效请尝试
1 | step1: hexo clean (请尝试, 一般无需执行) |
我相信,梦里能到达的地方,总有一天,脚步也能到达。
hexo\blog\themes\next\source\css\_custom\custom.styl
1 | // Custom styles. |
hexo\blog\themes\next\source\images
可以在该目录下添加主题所需要的图片
1 | step1: hexo clean (请尝试, 一般无需执行) |
我要把我向往的风景,变成我走过的路。
TDK为title
,description
,keywords
三个的统称。当然title
是最有用的,是非常值得优化的;而keywords
因为以前被seo人员过度使用,所以现在对这个进行优化对搜索引擎是没用的,这里就不说了;description
的描述会直接显示在搜索的介绍中,所以对用户的判断是否点击还是非常有效的。
title
的分隔符一般有,
,
_
-
等,其中_
对百度比较友好,而-
对谷歌比较友好,第四个为空格,英文站点可以使用,
中文少用。title
长度一般pc端大概30个中文,移动端20个,超过则会截断为省略号。
因为业务关系,我们做的更多的是针对百度搜索引擎的优化,所以这里把百度搜索引擎优化的建议分享下:
title格式:
首页:网站名称 或者 网站名称_提供服务介绍or产品介绍
频道页:频道名称_网站名称
文章页:文章title_频道名称_网站名称
如果你的文章标题不是很长,还可以加入点关键词进去,如文章title_关键词_网站名称
推荐做法:
每个网页应该有一个独一无二的标题,切忌所有的页面都使用同样的默认标题
标题要主题明确,包含这个网页中最重要的内容
简明精练,不罗列与网页内容不相关的信息
用户浏览通常是从左到右的,重要的内容应该放到title的靠前的位置
使用用户所熟知的语言描述。如果你有中、英文两种网站名称,尽量使用用户熟知的那一种做为标题描述
description
不是权值计算的参考因素,这个标签存在与否不影响网页权值,只会用做搜索结果摘要的一个选择目标。其长度pc端大概为78个中文,移动端为50个,超过则会截断为省略号。
百度推荐做法为:
网站首页、频道页、产品参数页等没有大段文字可以用做摘要的网页最适合使用description
准确的描述网页,不要堆砌关键词
为每个网页创建不同的description
,避免所有网页都使用同样的描述
长度合理,不过长不过短
果条件允许(如移动端,兼容ie9+,如果ie8+就针对ie8引入html5.js吧),是时候开始考虑使用html5语义化标签。如header,footer,section,aside,nav,article等
每个页面都应该有个唯一的h1标题,但不是每个页面的h1标题都是站点名称。(但html5中h1标题是可以多次出现的,每个具有结构大纲的标签都可以拥有自己独立的h1标题,如header
,footer
,section
,aside
,article
)
首页的h1标题为站点名称,内页的h1标题为各个内页的标题,如分类页用分类的名字,详细页用详细页标题作为h1标题
1 | <!-- 首页 --> |
img必须设置alt属性,如果宽度和高度固定请同时设置固定的值
1 | <img src="" alt="seo优化实战" width="200" height="100" /> |
对不需要跟踪爬行的链接,设置nofollow。可用在博客评论、论坛帖子、社会化网站、留言板等地方,也可用于广告链接,还可用于隐私政策,用户条款,登录等。如下代码表示该链接不需要跟踪爬行,可以阻止蜘蛛爬行及传递权重。
1 | <a href="http://example.com" rel="nofollow">no follow 链接</a> |
内容方面考虑:
用户体验方面考虑:
以现在搜索引擎的爬行能力是可以不用做静态化的,但是从收录难易度,用户体验及社会化分享,静态简短的URL都是更有利的。
1、统一连接
1 | http://www.domainname.com |
以上四个其实都是首页,虽然不会给访客造成什么麻烦,但对于搜索引擎来说就是四条网址,并且内容相同,很可能会被误认为是作弊手段,而且当搜索引擎要规范化网址时,需要从这些选择当中挑一个最好的代表,但是挑的这个不一定是你想要的。所以最好自己就规范好。
2、301跳转
第一种是URL发生改变,一定要把旧的地址301指向新的,不然之前做的一些收录权重什么的全白搭了。
第二种是一些cms系统,极有可能会造成多个路径对应同一篇文章。如drupal默认的路径是以node/nid,但是如果启用了path token,就可以自己自定义路径。这样一来就有两条路径对应同一篇文章。所以可以启用301,最终转向一个路径。
3、canonical
这个标签表示页面的唯一性(这个标签以前百度不支持,现在支持),用在平时参数传递的时候,如:
1 | //:ke.qq.com/download/app.html |
以上三个表示三个页面,但其实后两个只是想表明从哪来的而已,所以为了确保这三个为同一个页面,我们在head上加上canonical标签。
1 | <link rel="cononical" href="//:ke.qq.com/download/download/app.html" /> |
搜索引擎蜘蛛访问网站时会第一个访问robots.txt文件,robots.txt用于指导搜索引擎蜘蛛禁止抓取网站某些内容或只允许抓取那些内容,放在站点根目录。
User-agent 表示以下规则适用哪个蜘蛛,*表示所有
#表示注释
Disallow 表示禁止抓取的文件或目录,必须每个一行,分开写
Allow 表示允许抓取的文件或目录,必须每个一行,分开写
Sitemap 表示站点XML地图,注意S大写
站点地图格式分为HTML和XML两种。
HTML版本的是普通的HTML页面sitemap.html,用户可以直接访问,可以列出站点的所有主要链接,建议不超过100条。
XML版本的站点地图是google在2005年提出的,由XML标签组成,编码为utf-8,罗列页面所有的URL。其格式如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
其中urlset,url,loc三个为必须标签,lastmod,changefreq,priority为可选标签。
lastmod表示页面最后一次更新时间。
changefreq表示文件更新频率,有以下几种取值:always, hourly, daily, weekly, monthly, yearly, never。其中always表示一直变动,每次访问页面内容都不同;而never表示从来不变。
priority表示URL相对重要程度,取值范围为0.0-1.0,1.0表示最重要,一般用在网站首页,对应的0.0就是最不重要的,默认重要程度为0.5。(注意这里的重要度是我们标记的,并不代表搜索引擎真的就完全按照我们设置的重要度来排列)
sitemap.xml不能超过10M,而且每个sitemap文件中url的条数不要超过5万条,当你的sitemap文件很大的时候,可以分解为多个文件。如下分为两条,一条为基础,一条为产品详细页。
1 | <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> |
百度搜索风云榜
百度指数
百度站长平台
meta seo inspector,检查标签的,谷歌插件
seo in china,百度收录的各种数据,谷歌插件
check my links,检查链接,谷歌插件
seo quake,统计各种数据,谷歌插件
你跑得慢,听到的是骂声,你跑得快,听到的就是风声。
app\Http\Controllers\Auth\LoginController.php
users表增加一个status字段,并重写两个方法
1 | protected function attemptLogin(Request $request) |
app\Http\Controllers\Auth\RegisterController.php
修改前:
1 | public function __construct() |
修改后:
1 | public function __construct() |
你多学一样本事,就少说一句求人的话如果我们需要向我们的用用户展示一段`json`数据, 直接展示效果就会非常差,需要做一点点改变
1 | $("button").click(function () { |
酒贱常愁客少,月明多被云妨.
第一种调用方式:
1 | function test() { |
第二种调用方式:
1 | function test() { |
参数传递:
1 | function test($a, $b) { |
不定参数:
1 | function oldAdd() { |
或者
1 | function test() { |
第一种方法:
1 | class Test |
第二种方法:
1 | class Test |
静态方法:
1 | class Test |
普通方法传递参数:
1 | class Test |
类内部的方法调用
1 | class Test |
call_user_func is for calling functions whose name you don’t know ahead of time but it is much less efficient since the program has to lookup the function at runtime.
奥巴马55岁就退休,川普70岁才开始当总统。number_format() 函数格式化以后的数字不再是数字, 而是字符串
1 | $num = 12.5345; |
1 | $num = 0; |
1 | dd(empty(0.00)); // true |
1 | dump(empty('0')); // true |
1 | dump(empty('0.0')); // false |
1 | $num = 12.45; |
世人谓我恋长安,其实只恋长安某。在使用curl上传POST一段数据时,被提示413 Request Entity Too Large,应该是nginx限制了上传数据的大小。 解决方法就是: 打开nginx主配置文件`nginx.conf`,一般在`/usr/local/nginx/conf/nginx.conf`这个位置,找到`http{}`段,修改或者添加
1 | client_max_body_size 2m; |
1 | sudo /etc/init.d/nginxd reload |
1 | post_max_size = 2M |
仓廪实而知礼节,衣食足而知荣辱
在依赖注入这一篇博客里, 我们在一个已有的AppServiceProvider(服务提供者)中做了一个简单的绑定
app\Providers\AppServiceProvider.php
1 | use App\Repositories\UserRepository; |
现在我们创建一个自己的服务提供者
php artisan make:provider RepostiyServiceProvider
app\Providers\RepostiyServiceProvider.php
config\app.php
1 | 'providers' => [ |
1 | use App\Repositories\UserRepository; |
同样实现了上一篇博客的依赖注入
还可以这样绑定
1 | public function register() |
1 | use App\Repositories\UserRepository; |
在HomeController.php中使用
1 | public function index() |
或者
1 | public function index() |
现在假设我们有一个特别功能的 FooService 类。
1 | <?php |
如果我们要调用类的 doSomething 方法,我们可能会这样做 :
1 | $fooService = new \App\Services\FooService(); |
这看起来没有什么问题,但比较麻烦的是这儿的 ‘new’ 关键字,我的意思是虽然这样也很好,但是我们可以做的更优雅 (记住写代码要像 Laravel 一样,用优雅的方式)。
如何绑定 ?
绑定简单得可以用一行代码完成
1 | $this->app->bind('FooService', \App\Services\FooService::class); |
使用
1 | // 使用IoC 我们可以这么做 |
https://laravel-china.org/topics/10273/laravel-service-container-must-know
世之奇伟、瑰怪、非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。
不是我自身的,却是我需要的,都是我所依赖的。一切需要外部提供的,都是需要进行依赖注入的。
1 | <?php |
1 | //男孩 |
1 | //主动依赖 |
app\Repositories\UserRepository.php
1 | <?php |
1 | <?php |
以上代码可以直接运行
app\Repositories\UserRepositoryInterFace.php
1 | <?php |
1 | <?php |
1 | <?php |
我们依赖注入的是接口的时候, 需要做在AppServiceProvider(服务提供者)中做绑定,这样 laravel 就会帮你实例化依赖注入的类
app\Providers\AppServiceProvider.php
1 | use App\Repositories\UserRepository; |