整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

2019年seo动态网页优化“指南针”

信那些SEO优化的那些朋友们,肯定还在一股脑的想着如何让自己的网站安静下来,他们都把这一点列入了重中之重的位置。傲马创新营销培训专家不赞成此观点,网站页面是动态还是静态,根据网站实际目的需求来确定就好了。

为什么众多SEO强调页面静态化?

那是由于之前的引擎爬虫技术并不太完善,网站程序不合理和故意造成蜘蛛陷阱,导致爬行索引时进入死循环。鉴于此种情况,搜索引擎为避免发生这种现象,故减少对动态URL的读取。随着搜索引擎的完善,这种现象基本得到解决,谷歌现在对这种动态地址的抓取己经相当成功,百度也还不错,只是有待加强。但是,对于那些带过多环境变量(query string)的动态地址仍不够理想。

通过傲马创新营销推广专家认为,静态网页很好理解,就是一个对应的URL有且仅有一个对应的页面,而动态网页一般都是通过代码来生成的,没有固定的内容,一般动态URL中都会有'?'的存在,所以在seo中当然是静态网页比价好了,那如果你的网站已经是动态的了,该怎么优化呢?今天傲马创新营销推广专家为大家分享5个技巧。

1、CGI/ Perl方面

网站页面中使用的是 CGI 或者 Perl,可用一个脚本拾取环境变量前的所有字符,再将URL 中剩余字符赋值给一个变量。就可以在 URL 中使用该变量了。不过,对于内置了部分 SSI(Server-Side Include:服务器端嵌入)内容的网页,主要的搜索引擎都能够提供索引支持。以shtml 为后缀名的网页也被解析成 SSI 文件,相当于通常的html 文件。但傲马网络营销推广专家提醒大家,这些网页在其 URL 中使用的是cgi-bin 路径,则有可能不被搜索引擎索引。

2、ASP方面

ASP(Active Server Pages: Web 服务器端网页开发技术)被用于基于微软的网络服务器中。使用 ASP 开发的网页,一般后缀名为asp。只要避免在 URL 中使用符号“?”,为了帮助大家更好的做好网络营销推广,大多数搜索引擎都能够支持用 ASP 开发的网页。

3、Cold Fusion方面

如果使用的是 Cold Fusion,那么就需要在服务器端重新对其进行配置,使其能够将一个环境变量中的符号“?”用符号“/”代替,并将替换后的数值传给 URL。这样一来,最后到达浏览器端的就是一个静态的URL页。当搜索引擎对该转换后的文件进行检索时,它不会遭遇“?”,因而可继续对整个动态页的索引,从而使网页对搜索引擎仍然具有可读性。

4、Apache 服务器

Apache 是最流行的 HTTP 服务器软件之一。它有一个做 mod_rewrite 的重写模块,即 URL重写转向功能。该模块能够使你将包含环境变量的 URL 转换为能够为搜索引擎支持的 URL类型。对于那些网络营销推广工作者发布后无须多少更新的网页内容如新闻,可采用该重写转向功能。

5、建立静态入口

在“静动结合,以静制动”的原则指导下,网络营销推广专员还可以通过对网站做一些修改,尽可能增加网页的搜索引擎可见度。如将网页编入静态主页或网站地图的一个链接中,以静态目录的方式呈现该动页面。或者为动态页面建立一个专门的静态入口页面,链接到动态页面,然后将静态入口页面递交给搜索引擎。对一些重要的、内容相对固定的页面制作为静态网页,如包含有丰富关键词的介绍、用户帮助,以及含有重要页面链接的地图等。

静态网页是利于seo优化的,反之动态网页就相对比较困难,当然上面的内容需要一定的代码知识,大家如果解决不了,华茸工作室建议大家去找找公司的技术或者问问朋友,将自己的网站进行相应的优化。

总之,傲马创新营销推广专家认为动态URL不一定比静态页面差,只要优化得当,在搜索引擎中同样有好的表现。而且很多只能或最好用动态程序的时候(如论坛、订单系统等交互性很强的站点),没必要刻意要求生成HTML,或做成静态页面。

真正做好网络营销不是简单的了解,而是真正深入的学习,傲马系统创新营销培训课程已经成功帮助更多的传统企业转型互联网,网络营销推广技巧,seo推广技巧也得到了飞跃式的进步,傲马创新营销培训课程还有更多的干货和您分享。

7 Oct. 2021


平时我聊基金、转债、理财、保险比较多,上一篇文章破天荒谈到了“炒股”。


你们可能不太适应,多多也不会常写,哈哈毕竟我更专注在其他领域。


即便如此,在股票投资这一块我也是会涉猎到的。


今晚就跟大家分享一波我常用的炒股工具,粗暴点说就是我的搞钱工具。


可能大伙以后也会用得上。


1、找数据,用i问财 http://www.iwencai.com


这个网站我一直在用,不止是股票数据,基金数据也很多,而且还是免费的,非常方便,谁用谁知道。



可以找什么数据?基于你会问什么问题。


比如你想知道今天创历史新高的股票有多少只,只要输入:历史新高;上市天数大于90天,点击“问一下财”答案就出来了。



你如果想知道今年来哪些个股跑赢了沪深300,那便输入:今年来涨幅大于沪深300;2021年之前上市,点击“问一下财”答案也会秒出……


如果有需要,你还可以选择导出EXCEL数据表,自己来做统计,非常好用。


2、看研报,推荐这3个网站


如果你想快速深入地了解一家公司或一个行业,个人认为看研报是比较便捷和高效的方式。


推荐3个网站:


东方财富网 http://data.eastmoney.com/report/macresearch.jshtml


类别比较多,宏观研究、个股研报、行业研报、策略报告等都有。



宏观研究可以帮助我们把握大势,这个相对有趣一些,好比看历史、看社会;


个股研报可以帮我们分析公司,你手里买的什么股,总得对它有了解吧;


行业研报有助于我们分析行业趋势,做指数基金投资的朋友多看看这一块;


策略研报则指引我们下一步该做什么......


迈博汇金(以前叫“慧博资讯”)http://www.microbell.com/


它的数据库比较全,还可以通过智能搜索帮我们过滤一些比较“水”的报告。



有点麻烦的是它需要使用终端或APP才能下载报告,我近期换了新电脑才想起自己已经很久没用这个终端了


搜狐证券金罗盘 https://q.stock.sohu.com/jlp/res/list.up?query.bestAnalyst=true


这个网站可以免费展现分析师的测评能力,在首页左边就可以看到有各种排行榜。



点一下“明星分析师评级”,就可以知道最近哪些分析师最热。


点一下“近期热推行业”,就可以知道近期哪些行业是分析师写的最多的……


当然,研报只是一个参考,毕竟卖方市场写的报告多多少少会存在一点利益关系,我们一定要学会自我判断、自我决策。


3、查看上市公司的财务数据


推荐同花顺数据中心 http://data.10jqka.com.cn/financial/yjyg/###



业绩预告、业绩公告(财务报表)、分红派息等数据都有。找到你想了解的公司后,还会有比较直观的财务诊断。



4、其他


刚刚给大家分享的主要是偏个股的信息,股市还有很多数据是值得我们去研究的,例如两融数据变动、龙虎榜等,这时候就可以用以下工具了——


龙虎榜:

http://data.10jqka.com.cn/market/longhu/

http://data.eastmoney.com/stock/lhb.html


融资融券:

http://data.10jqka.com.cn/market/rzrq/

http://data.eastmoney.com/rzrq/


跟上市公司互动问答:

上证e互动网址 http://sns.sseinfo.com/

互动易网址 http://irm.cninfo.com.cn/szse/index.html


有这几个工具也差不多了,建议大家多摸索摸索,有机会再给大家介绍一些其他的。

、前言

这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式过滤只能输入3位数字,然后安装事件过滤器识别回车自动跳到下一个输入框。关于如何设置正则表达式过滤,这个可以搜索查到,本人也不大懂这个规则,貌似还有专门的书籍专门介绍正则表达式,可能这块非常强大。

开源地址:https://gitee.com/feiyangqingyun/QWidgetDemo https://github.com/feiyangqingyun/QWidgetDemo

二、实现的功能

  • 1:可设置IP地址,自动填入框
  • 2:可清空IP地址
  • 3:支持按下小圆点自动切换
  • 4:支持退格键自动切换
  • 5:支持IP地址过滤
  • 6:可设置背景色/边框颜色/边框圆角角度

三、效果图

四、头文件代码

#ifndef IPADDRESS_H
#define IPADDRESS_H

/**
 * IP地址输入框控件 作者:feiyangqingyun(QQ:517216493) 2017-8-11
 * 1:可设置IP地址,自动填入框
 * 2:可清空IP地址
 * 3:支持按下小圆点自动切换
 * 4:支持退格键自动切换
 * 5:支持IP地址过滤
 * 6:可设置背景色/边框颜色/边框圆角角度
 */

#include <QWidget>

class QLabel;
class QLineEdit;

#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif

class QDESIGNER_WIDGET_EXPORT IPAddress : public QWidget
#else
class IPAddress : public QWidget
#endif

{
    Q_OBJECT
    Q_PROPERTY(QString ip READ getIP WRITE setIP)

public:
    explicit IPAddress(QWidget *parent = 0);

protected:
    bool eventFilter(QObject *watched, QEvent *event);

private:
    QLabel *labDot1;    //第一个小圆点
    QLabel *labDot2;    //第二个小圆点
    QLabel *labDot3;    //第三个小圆点

    QLineEdit *txtIP1;  //IP地址网段输入框1
    QLineEdit *txtIP2;  //IP地址网段输入框2
    QLineEdit *txtIP3;  //IP地址网段输入框3
    QLineEdit *txtIP4;  //IP地址网段输入框4

    QString ip;         //IP地址
    QString bgColor;    //背景颜色
    QString borderColor;//边框颜色
    int borderRadius;   //边框圆角角度

private slots:
    void textChanged(const QString &text);

public:
    //获取IP地址
    QString getIP()                 const;

    QSize sizeHint()                const;
    QSize minimumSizeHint()         const;

public Q_SLOTS:
    //设置IP地址
    void setIP(const QString &ip);
    //清空
    void clear();

    //设置背景颜色
    void setBgColor(const QString &bgColor);
    //设置边框颜色
    void setBorderColor(const QString &borderColor);
    //设置边框圆角角度
    void setBorderRadius(int borderRadius);

};

#endif // IPADDRESS_H


【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:Qt资料领取(视频教程+文档+代码+项目实战)

五、核心代码

#pragma execution_character_set("utf-8")

#include "ipaddress.h"
#include "qlabel.h"
#include "qlineedit.h"
#include "qboxlayout.h"
#include "qregexp.h"
#include "qvalidator.h"
#include "qevent.h"
#include "qdebug.h"

IPAddress::IPAddress(QWidget *parent) : QWidget(parent)
{
    bgColor = "#FFFFFF";
    borderColor = "#A6B5B8";
    borderRadius = 3;

    //用于显示小圆点的标签,居中对齐
    labDot1 = new QLabel;
    labDot1->setAlignment(Qt::AlignCenter);
    labDot1->setText(".");

    labDot2 = new QLabel;
    labDot2->setAlignment(Qt::AlignCenter);
    labDot2->setText(".");

    labDot3 = new QLabel;
    labDot3->setAlignment(Qt::AlignCenter);
    labDot3->setText(".");

    //用于输入IP地址的文本框,居中对齐
    txtIP1 = new QLineEdit;
    txtIP1->setObjectName("txtIP1");
    txtIP1->setAlignment(Qt::AlignCenter);
    txtIP1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    connect(txtIP1, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));

    txtIP2 = new QLineEdit;
    txtIP2->setObjectName("txtIP2");
    txtIP2->setAlignment(Qt::AlignCenter);
    txtIP2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    connect(txtIP2, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));

    txtIP3 = new QLineEdit;
    txtIP3->setObjectName("txtIP3");
    txtIP3->setAlignment(Qt::AlignCenter);
    txtIP3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    connect(txtIP3, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));

    txtIP4 = new QLineEdit;
    txtIP4->setObjectName("txtIP4");
    txtIP4->setAlignment(Qt::AlignCenter);
    txtIP4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    connect(txtIP4, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));

    //设置IP地址校验过滤
    QRegExp regExp("(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})");
    QRegExpValidator *validator = new QRegExpValidator(regExp, this);
    txtIP1->setValidator(validator);
    txtIP2->setValidator(validator);
    txtIP3->setValidator(validator);
    txtIP4->setValidator(validator);

    //绑定事件过滤器,识别键盘按下
    txtIP1->installEventFilter(this);
    txtIP2->installEventFilter(this);
    txtIP3->installEventFilter(this);
    txtIP4->installEventFilter(this);

    QFrame *frame = new QFrame;
    frame->setObjectName("frameIP");

    QStringList qss;
    qss.append(QString("QFrame#frameIP{border:1px solid %1;border-radius:%2px;}").arg(borderColor).arg(borderRadius));
    qss.append(QString("QLabel{min-width:15px;background-color:%1;}").arg(bgColor));
    qss.append(QString("QLineEdit{background-color:%1;border:none;}").arg(bgColor));
    qss.append(QString("QLineEdit#txtIP1{border-top-left-radius:%1px;border-bottom-left-radius:%1px;}").arg(borderRadius));
    qss.append(QString("QLineEdit#txtIP4{border-top-right-radius:%1px;border-bottom-right-radius:%1px;}").arg(borderRadius));
    frame->setStyleSheet(qss.join(""));

    QVBoxLayout *verticalLayout = new QVBoxLayout(this);
    verticalLayout->setMargin(0);
    verticalLayout->setSpacing(0);
    verticalLayout->addWidget(frame);

    //将控件按照横向布局排列
    QHBoxLayout *layout = new QHBoxLayout(frame);
    layout->setMargin(0);
    layout->setSpacing(0);
    layout->addWidget(txtIP1);
    layout->addWidget(labDot1);
    layout->addWidget(txtIP2);
    layout->addWidget(labDot2);
    layout->addWidget(txtIP3);
    layout->addWidget(labDot3);
    layout->addWidget(txtIP4);
}

bool IPAddress::eventFilter(QObject *watched, QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
        QLineEdit *txt = (QLineEdit *)watched;
        if (txt == txtIP1 || txt == txtIP2 || txt == txtIP3 || txt == txtIP4) {
            QKeyEvent *key = (QKeyEvent *)event;

            //如果当前按下了小数点则移动焦点到下一个输入框
            if (key->text() == ".") {
                this->focusNextChild();
            }

            //如果按下了退格键并且当前文本框已经没有了内容则焦点往前移
            if (key->key() == Qt::Key_Backspace) {
                if (txt->text().length() <= 1) {
                    this->focusNextPrevChild(false);
                }
            }
        }
    }

    return QWidget::eventFilter(watched, event);
}

void IPAddress::textChanged(const QString &text)
{
    int len = text.length();
    int value = text.toInt();

    //判断当前是否输入完成一个网段,是的话则自动移动到下一个输入框
    if (len == 3) {
        if (value >= 100 && value <= 255) {
            this->focusNextChild();
        }
    }

    //拼接成完整IP地址
    ip = QString("%1.%2.%3.%4").arg(txtIP1->text()).arg(txtIP2->text()).arg(txtIP3->text()).arg(txtIP4->text());
}

QString IPAddress::getIP() const
{
    return this->ip;
}

QSize IPAddress::sizeHint() const
{
    return QSize(250, 20);
}

QSize IPAddress::minimumSizeHint() const
{
    return QSize(30, 10);
}

void IPAddress::setIP(const QString &ip)
{
    //先检测IP地址是否合法
    QRegExp regExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
    if (!regExp.exactMatch(ip)) {
        return;
    }

    if (this->ip != ip) {
        this->ip = ip;

        //将IP地址填入各个网段
        QStringList list = ip.split(".");
        txtIP1->setText(list.at(0));
        txtIP2->setText(list.at(1));
        txtIP3->setText(list.at(2));
        txtIP4->setText(list.at(3));
    }
}

void IPAddress::clear()
{
    txtIP1->clear();
    txtIP2->clear();
    txtIP3->clear();
    txtIP4->clear();
    txtIP1->setFocus();
}

void IPAddress::setBgColor(const QString &bgColor)
{
    if (this->bgColor != bgColor) {
        this->bgColor = bgColor;
    }
}

void IPAddress::setBorderColor(const QString &borderColor)
{
    if (this->borderColor != borderColor) {
        this->borderColor = borderColor;
    }
}

void IPAddress::setBorderRadius(int borderRadius)
{
    if (this->borderRadius != borderRadius) {
        this->borderRadius = borderRadius;
    }
}


六、控件介绍

  1. 超过160个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt集成的控件数量。
  2. 每个类都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。qwt的控件类环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。
  3. 全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.13的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式linux等,不乱码,可直接集成到Qt Creator中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。
  4. 每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。
  5. 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。
  6. 每个控件默认配色和demo对应的配色都非常精美。
  7. 超过130个可见控件,6个不可见控件。
  8. 部分控件提供多种样式风格选择,多种指示器样式选择。
  9. 所有控件自适应窗体拉伸变化。
  10. 集成自定义控件属性设计器,支持拖曳设计,所见即所得,支持导入导出xml格式。
  11. 自带activex控件demo,所有控件可以直接运行在ie浏览器中。
  12. 集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。
  13. 所有控件最后生成一个动态库文件(dll或者so等),可以直接集成到qtcreator中拖曳设计使用。
  14. 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。
  15. 自定义控件插件开放动态库使用(永久免费),无任何后门和限制,请放心使用。
  16. 目前已提供32个版本的dll,其中qt_5_7_0_mingw530_32这个版本会一直保证最新的完整的。
  17. 不定期增加控件和完善控件,不定期更新SDK,欢迎各位提出建议,谢谢!
  18. Qt入门书籍推荐霍亚飞的《Qt Creator快速入门》《Qt5编程入门》,Qt进阶书籍推荐官方的《C++ GUI Qt4编程》。
  19. 强烈推荐程序员自我修养和规划系列书《大话程序员》《程序员的成长课》《解忧程序员》,受益匪浅,受益终生!
  20. SDK地址:https://gitee.com/feiyangqingyun/QUCSDK https://github.com/feiyangqingyun/qucsdk

原文链接:https://www.cnblogs.com/feiyangqingyun/p/11665022.html

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:「链接」